如何调整正则表达式,从匹配结果中排除逗号与句号?
调整后的正则表达式
(?i)\b(?:marche\s(?:\d{5})?-?(?:\d{3,5})|(?:\d{5})-?(?:\d{4})?\smarche|(?<=,)marche(?=[\.,])|marche(?=$|\.))\b
修改说明
针对原正则捕获逗号、句号的问题,核心做了两处调整:
- 将原分支
[,]marche[\.,]替换为(?<=,)marche(?=[\.,]):用正向回顾后发断言(?<=,)确保marche前存在逗号,正向先行断言(?=[\.,])确保marche后是逗号或句号。断言仅匹配位置,不会将符号纳入捕获结果。 - 将原分支
marche$替换为marche(?=$|\.):通过先行断言(?=$|\.)匹配行尾或句号前的marche,避免捕获结尾的句号。
其余分支保留原有匹配逻辑:
- 匹配
marche后跟数字组合(如marche 12345-1234、marche 12345) - 匹配数字组合后跟
marche(如12345-1234 marche、12345 marche)
测试效果验证
针对你的测试字符串,调整后的正则会精准捕获以下无逗号、句号的目标内容:
marche(来自5,rue du marche,)Marche(来自University Polytechnic of Marche,)Marche(来自,Marche,、,Marche.)Marche 12345-1234(来自,Marche 12345-1234,)Marche(来自,Marche结尾)Marche 12345(来自,Marche 12345、,Marche 12345.、,Marche 12345,Italy)12345-1234 Marche(来自,12345-1234 Marche.)12345 Marche(来自,12345 Marche.)
同时会忽略lemarche这类非独立的marche字符串。
内容的提问来源于stack exchange,提问作者SHIVAM SINGH
相关产品推荐
相关产品推荐

