Python正则负向前瞻问题:排除les前缀的RESULTATS等关键词匹配
问题根因
- 你写的负向先行断言
^(?!les)仅限制整个字符串的开头不能是les,如果les出现在字符串中间位置,后面跟RESULT相关内容,完全不会触发排除逻辑 - 如果你使用
re.search()而非re.match()做匹配,^锚定的字符串开头规则对字符串中间位置的匹配完全不生效,自然无法排除中间带les前缀的RESULT类匹配项
修复方案
替换原有正则为下方兼容写法即可:
import re # 适配Python3.7及以上版本,支持les和RESULT之间存在任意空白字符 REGEX_NOMS_COL = re.compile( r"(?<!les\s+)R.SULTAT\w*|NOMS|ECHANTILLON\w*|analyses", re.IGNORECASE ) # 低版本Python兼容方案 REGEX_NOMS_COL = re.compile( r"^(?!.*les\s+R.SULTAT).*(R.SULTAT\w*|NOMS|ECHANTILLON\w*|analyses)", re.IGNORECASE )
匹配效果验证
- 可正常匹配:
RESULTATS、RÉSULTATS、NOMS、ECHANTILLONS、les NOMS(仅RESULT类词汇需要排除les前缀) - 自动排除:
les RESULTATS、les RÉSULTATS、任意前缀 les Resultats 任意后缀类文本
内容的提问来源于stack exchange,提问作者tom
相关产品推荐
相关产品推荐

