正则匹配特定分隔符包裹的2-5位单词时如何排除指定词汇?
正则调整方案
你可以在原有正则的字母匹配逻辑前增加负向先行断言来过滤指定排除词汇,调整后的正则如下(以排除und、ind为例):
((?!und|ind)[A-Za-z]{2,5}(?=[ \.-]))|((?<=[ \.-])(?!und|ind)[A-Za-z]{2,5})
规则说明
- 新增的
(?!und|ind)是负向先行断言,只要当前位置之后的字符完全匹配und或者ind,就会直接中断匹配流程,无论这两个单词的前后是什么字符,都不会被正则命中 - 如果需要新增排除词汇,直接在断言的
|后面追加即可,比如要额外排除abc,就把断言修改为(?!und|ind|abc)
正则简化方案
你原有正则的两个分支可以合并简化,简化后的版本效果完全一致,更易维护:
(?<=[ \.-])(?!und|ind)[A-Za-z]{2,5}(?=[ \.-])
内容的提问来源于stack exchange,提问作者Claudio Ferraro
相关产品推荐
相关产品推荐

