在文本中找到特定词的一些问题

时间:2014-10-08 11:03:08

标签: regex python-2.7 findall

我是Python的新手并且有一些简单的问题(但是他们会杀了我)。

我想要一个代码,告诉我“博士”之后的单词,但只有,如果下面的单词是标题,就像Bernard在“伯纳德博士”中那样。我需要许多其他东西,比如“med”。等等...

这是我的代码:

    sentence = "Dr. Mobuis is a good person. Dr. med. Peter isnt."
    for m in re.finditer("(Dr\.|med\.)\s([A-Z][a-z]+)", sentence):
         print '%02d-%02d: %s' % (m.start(), m.end(), m.group(0))

好吧,现在我明白了:

    00-10: Dr. Mobuis
    33-43: med. Peter

我想摆脱那个“博士”和“医学”。怎么样?或者有更好的方法来解决问题吗?

2 个答案:

答案 0 :(得分:0)

(?<=Dr.)\s*(\b[A-Z]\w+\b)

试试这个。抓住比赛。见演示。

http://regex101.com/r/hQ1rP0/75

答案 1 :(得分:0)

只需打印组索引2而不是组索引0。

>>> for m in re.finditer("(Dr\.|med\.)\s([A-Z][a-z]+)", sentence):
...     print '%02d-%02d: %s' % (m.start(), m.end(), m.group(2))
... 
00-10: Mobuis
33-43: Peter

<强>更新

>>> for m in re.finditer("(Dr\.|med\.)\s([A-Z][a-z]+)\s\S+", sentence):...     print '%02d-%02d: %s - context is %s' % (m.start(), m.end(), m.group(2),m.group(0))
... 
00-13: Mobuis - context is Dr. Mobuis is
33-49: Peter - context is med. Peter isnt.