我想删除单词 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
,这意味着 D
或 d
后跟 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/