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

时间:2014-09-17 13:42:57

标签: python regex

我想删除 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

但是上述模式没有得到匹配 我是形成正则表达式的新手。请帮我理解我的错误。谢谢你

1 个答案:

答案 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,这意味着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')
''