Python单正则实现:匹配指定词并排除含抑制词的行
解决方案
正则表达式
import re pattern = r'^(?!.*\b(check|draft)\w*).*\b(attend|confer|call)\w*.*$'
正则说明
^:锚定行起始位置(?!.*\b(check|draft)\w*):负向先行断言,确保整行中不存在以check或draft开头的单词(\w*匹配后续任意字母数字,覆盖checking、drafting这类变体).*\b(attend|confer|call)\w*.*:匹配包含attend/confer/call开头单词的整行内容,\b确保匹配完整单词前缀,\w*覆盖衍生词(如attending、conference)$:锚定行结束位置
验证示例
text1 = "接收并起草Sharma先生关于和解会议出席事宜的信函。" text2 = "接收并审阅Sharma先生关于和解会议出席事宜的信函。" print(re.fullmatch(pattern, text1)) # 输出 None(含draft相关词,不匹配) print(re.fullmatch(pattern, text2)) # 输出匹配对象(无抑制词,含attend相关词)
原正则问题分析
你之前尝试的(\battend|\bconfer|\bcall)(?!.*?\b(check|draf)).*存在逻辑缺陷:负向断言仅检查目标词之后的内容,若抑制词(如drafting)出现在目标词之前,无法被检测到,导致错误匹配。
内容的提问来源于stack exchange,提问作者Alpha Beta
相关产品推荐
相关产品推荐

