如何修改正则表达式,使其仅在前句含and时匹配句首的And?
正则匹配规则修改方案
你当前使用的.*\b(and)\b.*\. And存在贪婪匹配问题,.*会跨多个句子检索and,只要全文任意位置存在and,后续的所有And都会被命中,无法限制仅在And的前一个句子中检索and。
修改后的正则表达式
[^\.]+\band\b[^\.]*\.\s*And
规则拆解
[^\.]+:匹配前一个句子中and之前的所有非句号字符,确保检索范围不会跨到更早的句子\band\b:全字匹配前一个句子中的小写and[^\.]*:匹配前一个句子中and之后到句尾句号前的所有非句号字符\.\s*:匹配前一个句子的结尾句号,以及句号和后续And之间的任意空白字符(包含空格、换行等)And:匹配目标首字母大写的And
效果验证
针对你给出的测试场景:
Text and text text. Text text. And text. (不要匹配此处的"And.")
Text and text text. And text. (匹配此处的"And.")
修改后的正则只会命中第二个场景中的And,完全符合需求。
注:如果文本中存在带句号的缩写(如
Dr.、Mr.),会被误判为句子边界,该场景需要额外调整规则适配特殊缩写。
内容的提问来源于stack exchange,提问作者wyc
相关产品推荐
相关产品推荐

