python - 正则表达式删除匹配的单词和连续的单词

标签 python regex

我想删除单词 Dr 及其连续单词。
例如

输入

Financial disclosure of Dr Kucher
Patient 1 had adverse events and dr Bodendieck supposes that patient 1 does not tolerate milk
Drug accountability log and patient compliance.

在上面的输入模式中,我想删除所有以粗体突出显示的文本

输出

Financial disclosure of
Patient 1 had adverse events and supposes that patient 1 does not tolerate milk
Drug accountability log and patient compliance.

我正在使用的模式
/[(D|d)r]\s*(?=\w+)

据我了解
[(D|d)r] 应匹配“Dr”或“dr”
\s* 应匹配空格
(?=\w+]) 应匹配紧邻的连续单词。

引用模式
http://regex101.com/r/eU5yT8/2

但是上面的模式没有被匹配 我是形成正则表达式的新手。请帮助我理解我的错误。谢谢

最佳答案

应该是:

re.sub(r'\b[Dd]r\s+\w+', '', txt)

当你用(?=...)换行时,它会向前看,但不会消耗,如the documentation :Isaac (?=Asimov) 仅当后跟 'Asimov' 时才匹配 'Isaac '。这意味着它不会匹配 'Asimov':

>>> re.findall(r'Isaac (?=Asimov)', 'Isaac Asimov')
['Isaac ']

此外,您还需要 [Dd]r,这意味着 Dd 后跟 r,或者或者(Dr|dr)

\b 将指定单词边界,否则,它将匹配单词末尾的 dr (如果我们有这样的单词):

>>> re.sub(r'[Dd]r\s*\w+', '', 'xdr test')
'x'

您将需要 \s+,否则它将匹配单词中间的 dr:

>>> re.sub(r'\b[Dd]r\s*\w+', '', 'drug')
''

关于python - 正则表达式删除匹配的单词和连续的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25892299/

相关文章:

python - 如何在 marshmallow-sqlalchemy 中使用嵌套对象加载

Python错误检查错误?

javascript - 用于解析可能用引号表示的参数的正则表达式

javascript - 将逗号分隔的字符串转换为逗号分隔的数字

javascript - 如何在 Django 管理主页中加载自定义 JS 文件?

python - PyGame 模拟坐标错误

python - Pygame.mixer 模块丢失?

regex - 如何删除字符串中的空格或制作接受所有类型有效电子邮件的正则表达式

python - 根据字母数检索带括号的缩写的定义

javascript - RegExp转义功能的问题-Javascript