在以下字符串中:
G 767
我正在尝试将 G
和 767
与我在运行时加入的两种模式相匹配,因为它们每个都是单独的类型,我有一个单独的类型类(class) 。
^(?<ServiceType>[A-Z])(?= )
和
(?<= )(?<AircraftType>[A-Z0-9]{3})(?= |$)
如果我使用 G
和 767
分别对每个模式进行单元测试,它们可以工作,但结合在一起回溯将正则表达式引擎发送到字符串的开头(在 regex101 调试器中测试) )。然而,当我在两个环视之间放置一个空格时,它就起作用了。如果可能的话我宁愿不这样做。当我使用两个 ? 时它也有效。 ?
而不是环顾四周,但我对这个解决方案也不是很满意,因为它会允许两个空格,而只允许一个空格。
我应该如何修改模式,以便它们适用于单独测试的每个案例以及组合在一起时的情况。
为什么会发生这种情况:在第一个匹配之后,引擎开始扫描字符串的开头?我认为它会在 G
之后继续,然后看到后向查找的空间并匹配第二个字符串。
计划是创建重叠的图案,并且空间应该是它们共同的。
最佳答案
也许您可以使用以下模式:
^(?<ServiceType>[A-Z])\s
和
(?<= )(?<AircraftType>[A-Z0-9]{3}(?= |$)
这些可以合并在一起:
var pattern = firstPattern + secondPattern;
如果不起作用,请具体说明问题所在。
关于c# - 匹配字符串之间有空格并连接具有重叠空格的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32626014/