正则表达式:缺少最后一个符号
RegExp: last symbol missing
我写了一个正则表达式:
^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)\s(.+)[^\)]$
将字符串分为街道类型和街道名称。有些街道有街道位置描述,我不想select。
这是:
https://regex101.com/r/j3gF5b/2
它有效,但街道名称中的每个最后一个符号都丢失了。我想知道为什么会出现这种情况以及如何修复?
您的 [^)]
正好匹配 1 个不是 )
的字符...那是您从街道名称中遗漏的字母
你可以使用这个:
^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)\s([^\)]+?)$
原因是否定字符class仍然消耗匹配的子串。在断言 string/line:
结束后使用 negative lookbehind(零宽度断言,非消耗构造)
^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)\s(.+)$(?<!\))
^^^^^^^
所有以)
结尾的匹配都会失败。
另一种方法是使用否定前瞻(如果正则表达式引擎不支持后视,如JavaScript):
^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)(?!.*\)$)\s*(.+)$
将其放入捕获组中(并最终排除换行符):
^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)\s(.*[^)\r\n])$
如果您只想丢弃位置描述并保留其余部分:
^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)\s([^(\s]*(?:\h+[^(\s]+)*)
我写了一个正则表达式:
^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)\s(.+)[^\)]$
将字符串分为街道类型和街道名称。有些街道有街道位置描述,我不想select。
这是: https://regex101.com/r/j3gF5b/2
它有效,但街道名称中的每个最后一个符号都丢失了。我想知道为什么会出现这种情况以及如何修复?
您的 [^)]
正好匹配 1 个不是 )
的字符...那是您从街道名称中遗漏的字母
你可以使用这个:
^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)\s([^\)]+?)$
原因是否定字符class仍然消耗匹配的子串。在断言 string/line:
结束后使用 negative lookbehind(零宽度断言,非消耗构造)^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)\s(.+)$(?<!\))
^^^^^^^
所有以)
结尾的匹配都会失败。
另一种方法是使用否定前瞻(如果正则表达式引擎不支持后视,如JavaScript):
^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)(?!.*\)$)\s*(.+)$
将其放入捕获组中(并最终排除换行符):
^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)\s(.*[^)\r\n])$
如果您只想丢弃位置描述并保留其余部分:
^(проезд|пл|пр-кт|пер|наб|линия|км|б-р|аллея|кв-л)\s([^(\s]*(?:\h+[^(\s]+)*)