将字符串与字符串之间的空间匹配,并将图案与重叠的空间连接
本文关键字:空间 字符串 重叠 连接 之间 | 更新日期: 2023-09-27 18:13:16
在以下字符串中:
G 767
我正在尝试将G
和767
与我在运行时加入的两个模式相匹配,因为它们都是一个单独的类型,我有一个独立的类。
^(?<ServiceType>[A-Z])(?= )
和
(?<= )(?<AircraftType>[A-Z0-9]{3})(?= |$)
如果我用G
和767
分别对每个模式进行单元测试,它们可以工作,但结合在一起,回溯将regex引擎发送到字符串的开头(在regex101调试器中测试(。然而,当我在两个环视之间留出一个空间时,它就起作用了。如果可能的话,我宁愿不做。当我使用两个? ?
而不是环视时,它也可以工作,但我对这个解决方案也不太满意,因为它允许两个空间,而只允许一个空间。
我应该如何修改模式,使其适用于单独测试的每个案例,以及在连接在一起时。
为什么在第一次匹配之后,引擎开始在字符串的开头进行扫描?我认为它会在G
之后继续,然后查看查找表的空间并匹配第二个字符串。
计划是创建重叠的模式,并且两个模式的空间应该是共同的。
也许您可以使用以下模式:
^(?<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
。