我想删除 Dr 这个词及其连续的单词
例如
输入
Kucher博士的财务披露患者1有不利影响 事件和博士Bodendieck 假设患者1不能忍受 牛奶
药品责任日志和患者依从性。
在上面的输入模式中,我想删除以粗体
突出显示的所有文本 输出
患者1的财务披露有不良事件和 假设患者1不能耐受乳汁。药物责任 记录和患者依从性。
我正在使用的模式
/[(D|d)r]\s*(?=\w+)
根据我的理解 [(D | d)r] 应与“Dr”或“dr”匹配 \ s * 应与空格相匹配 (?= \ w +])应与即时连续字匹配。
参考模式
http://regex101.com/r/eU5yT8/2
但是上述模式没有得到匹配 我是形成正则表达式的新手。请帮我理解我的错误。谢谢你
答案 0 :(得分:1)
应该是:
re.sub(r'\b[Dd]r\s+\w+', '', txt)
当你换入(?=...)
时,它会提前但不会消费,就像在the documentation中一样:Isaac (?=Asimov)
将匹配 'Isaac '
只有在'Asimov'
之后。这意味着它不匹配'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')
''