c# - 匹配字符串之间有空格并连接具有重叠空格的模式

标签 c# regex backtracking regex-lookarounds

在以下字符串中:

G 767

我正在尝试将 G767 与我在运行时加入的两种模式相匹配,因为它们每个都是单独的类型,我有一个单独的类型类(class) 。

^(?<ServiceType>[A-Z])(?= )

(?<= )(?<AircraftType>[A-Z0-9]{3})(?= |$)

如果我使用 G767 分别对每个模式进行单元测试,它们可以工作,但结合在一起回溯将正则表达式引擎发送到字符串的开头(在 regex101 调试器中测试) )。然而,当我在两个环视之间放置一个空格时,它就起作用了。如果可能的话我宁愿不这样做。当我使用两个 ? 时它也有效。 ? 而不是环顾四周,但我对这个解决方案也不是很满意,因为它会允许两个空格,而只允许一个空格。

我应该如何修改模式,以便它们适用于单独测试的每个案例以及组合在一起时的情况。

为什么会发生这种情况:在第一个匹配之后,引擎开始扫描字符串的开头?我认为它会在 G 之后继续,然后看到后向查找的空间并匹配第二个字符串。

计划是创建重叠的图案,并且空间应该是它们共同的。

最佳答案

也许您可以使用以下模式:

^(?<ServiceType>[A-Z])\s(?<= )(?<AircraftType>[A-Z0-9]{3}(?= |$)

这些可以合并在一起:

var pattern = firstPattern + secondPattern;

如果不起作用,请具体说明问题所在。

关于c# - 匹配字符串之间有空格并连接具有重叠空格的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32626014/

相关文章:

查找最长非重叠序列的算法

c# - xsd.exe 属性顺序

c# - 修剪 url 字符串。 C#

c# - VBA 和 "Class doesn' t 支持自动化或不支持预期的界面”

php - 检查破折号 (-) 后的最后一个值是否是 PHP 字符串中的数字

小写字母或句点后跟大写字母的正则表达式

c# - OData 路由返回 404 Not Found

javascript - 通过正则表达式从盒子阴影中获取每个值

prolog - 找到各种谓词的最小值

algorithm - 使用回溯的近似字符串匹配