匹配它们之间带有 space 的字符串并连接具有重叠 space 的模式
Matching strings with a space between them and joining patterns with overlapping space
在以下字符串中:
G 767
我正在尝试将 G
和 767
与我在运行时加入的两种模式相匹配,因为它们中的每一种都是单独的类型,我有一个单独的 class 。
^(?<ServiceType>[A-Z])(?= )
和
(?<= )(?<AircraftType>[A-Z0-9]{3})(?= |$)
如果我用 G
和 767
分别对每个模式进行单元测试,它们可以工作,但连接在一起时,回溯会将正则表达式引擎发送到字符串的开头(在 regex101 调试器中测试)。但是,当我在两个环视之间放置 space 时,它会起作用。如果可能的话,我宁愿不这样做。当我使用两个 ? ?
而不是环顾四周时它也有效,但我对这个解决方案也不是很满意,因为它允许两个 space,而只允许一个。
我应该如何修改模式,以便它们适用于单独测试的每个案例以及连接在一起时。
为什么会发生这种情况,在第一次匹配后引擎开始扫描字符串的开头?我认为它会在 G
之后继续,然后查看 space 的后视并匹配第二个字符串。
计划是创建重叠模式,space 应该对它们都是通用的。
也许您可以使用以下模式:
^(?<ServiceType>[A-Z])\s
和
(?<= )(?<AircraftType>[A-Z0-9]{3}(?= |$)
这些可以合并在一起:
var pattern = firstPattern + secondPattern;
如果它不起作用,请指出确切的问题。
^(?<ServiceType>[A-Z])(?= ) +(?<= )(?<AircraftType>[A-Z0-9]{3})(?= |$)
您必须使用 space
因为 lookarounds
是 0 width assertions
所以不会使用 space.For 正则表达式引擎来获得 space
具有的整体匹配被某人消费。
在以下字符串中:
G 767
我正在尝试将 G
和 767
与我在运行时加入的两种模式相匹配,因为它们中的每一种都是单独的类型,我有一个单独的 class 。
^(?<ServiceType>[A-Z])(?= )
和
(?<= )(?<AircraftType>[A-Z0-9]{3})(?= |$)
如果我用 G
和 767
分别对每个模式进行单元测试,它们可以工作,但连接在一起时,回溯会将正则表达式引擎发送到字符串的开头(在 regex101 调试器中测试)。但是,当我在两个环视之间放置 space 时,它会起作用。如果可能的话,我宁愿不这样做。当我使用两个 ? ?
而不是环顾四周时它也有效,但我对这个解决方案也不是很满意,因为它允许两个 space,而只允许一个。
我应该如何修改模式,以便它们适用于单独测试的每个案例以及连接在一起时。
为什么会发生这种情况,在第一次匹配后引擎开始扫描字符串的开头?我认为它会在 G
之后继续,然后查看 space 的后视并匹配第二个字符串。
计划是创建重叠模式,space 应该对它们都是通用的。
也许您可以使用以下模式:
^(?<ServiceType>[A-Z])\s
和
(?<= )(?<AircraftType>[A-Z0-9]{3}(?= |$)
这些可以合并在一起:
var pattern = firstPattern + secondPattern;
如果它不起作用,请指出确切的问题。
^(?<ServiceType>[A-Z])(?= ) +(?<= )(?<AircraftType>[A-Z0-9]{3})(?= |$)
您必须使用 space
因为 lookarounds
是 0 width assertions
所以不会使用 space.For 正则表达式引擎来获得 space
具有的整体匹配被某人消费。