示例:
文本1:夏尔马先生关于以下问题的信件的接收和起草:可参加和解会议。
文本2:收到并审查夏尔马先生关于以下问题的信函:可参加和解会议。
问题:如果一行包含类似";出席%"赋予%";或";呼叫%";那么它应该在该行的任何地方找到匹配,但如果同一行也包含类似"匹配"的单词;检查%";以及";草稿%";那么它应该忽略该行中的任何位置。
因此,文本1不应该匹配,因为它包含单词";"绘图";,而文本应该匹配,因为它不包含抑制项,如支票%和汇票%
尝试过:(battend|bconfer|bcall)(?!.*?b(check|draf)).*
我需要python中的单行regex解决方案。有人愿意在这里帮我吗?
您应该将负前瞻断言放在一行的开头:
^(?!.*(?:bcheck|bdraf)).*(battend|bconfer|bcall)
演示:https://regex101.com/r/EtBSX4/1
这个表达式执行您要查找的操作:
(?=(^(?:(?!b(draft|check)).)*$))(?=.*?(battend|bconfer|bcall))
您可以使用positivelookahead(?=(来首先检查整行是否不包含筛选词,然后查看您想要的词是否存在。