Python 正则表达式:负后视不直接在目标词之前

Python Regex: negative lookbehind not directly before target word

我正在 Jupyter Notebook 中构建一个 NLP 基线脚本,它应该从报告中过滤掉所有 'embolisms'。但是,当单词 'no' 或 'not' 出现在同一个 line/sentence 中时,我不希望将它们包括在内。使用正则表达式很容易,一旦您知道单词出现的位置(如果出现)。但是中间可以有很多字。

这是排除 'no embolism' 的正则表达式,当它们一起出现在句子中时:

result = re.findall('(?<!\no )(embolism?\w)', text)

扩展到多个单词时使用正则表达式出现的错误是:“错误:后视需要固定宽度的模式”

我用谷歌搜索了如何解决它,但我没有找到适用于这个问题的解决方案。我还发现使用 pip 安装 Regex 可以消除上述错误。不过,我还是想知道这个问题有没有解决办法?

最佳,

您可以通过匹配排除最后 2 个,并捕获要保留在组中的第一个示例。

^(?:.*\bnot?\b.*\bembolism\b.*|.*\bembolism\b.*\bnot?\b.*)|(.*\bembolism\b.*)$

说明

  • ^ 字符串开头
  • (?:非捕获组
    • .*\bnot?\b.*\bembolism\b.*匹配先无或无后栓塞
    • |
    • .*\bembolism\b.*\bnot?\b.*反过来匹配
  • )关闭非捕获组
  • |
  • (.*\bembolism\b.*)捕获第1组(你想保留的)含有栓塞
  • $ 字符串结束

Regex demo