REGEXP:丢失的最后符号



我写了一个正则表达式:

^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)s(.+)[^)]$

将字符串分为街道类型和街道名称。有些街道有街道位置描述,我不想选择。

这里是:https://regex101.com/r/j3gf5b/2

它有效,但是街道名称中的每个最后一个符号都缺少。我想知道为什么会发生这种情况以及如何修复?

您的[^)]完全匹配1个不是)的字符...那是您街头名称中缺少的字母

您可以使用以下方式:

^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)s([^)]+?)$

原因是否定的字符类 stall 消耗匹配的子字符串。在断言字符串/行的末尾之后,请使用否定的lookbehind (零宽的断言,非消费构建体):

^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)s(.+)$(?<!))
                                                         ^^^^^^^

它将失败与)结束的所有匹配。

请参阅Regex Demo

另一种方法是使用负面的lookahead(如果正则发动机不支持lookhinds,如javaScript中):

^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)(?!.*)$)s*(.+)$

请参阅另一个演示

将其放在捕获组中(最终也排除了newline字符):

^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)s(.*[^)rn])$

演示

如果您只想丢弃位置描述并保留其余的:

^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)s([^(s]*(?:h+[^(s]+)*)

demo

相关内容

最新更新