将字符串与字符串之间的空间匹配,并将图案与重叠的空间连接

本文关键字:空间 字符串 重叠 连接 之间 | 更新日期: 2023-09-27 18:13:16

在以下字符串中:

G 767

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

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

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

如果我用G767分别对每个模式进行单元测试,它们可以工作,但结合在一起,回溯将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,因为lookarounds0 width assertions,所以不会消耗空间。为了让正则表达式引擎获得整体匹配,必须有人使用space