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组(你想保留的)含有栓塞
$
字符串结束
我正在 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组(你想保留的)含有栓塞$
字符串结束