简单的正则表达式找到两个单词

时间:2014-10-08 17:51:47

标签: python regex

我对正则表达式的一个快速提问让我发疯:

    sentence="Dr. Peter is a great man. Dr. med. Lumpert Mercury is a great man."
    for m in re.finditer("(Dr\.|med\.)\s([A-Z][a-z]+)", sentence):
          print '%02d-%02d: %s' % (m.start(), m.end(), m.group(2))

这段代码给了我一个字符串之后的所有单词" Dr。"或" med。"如果这个词以一个资本开头。 现在我需要字符串后面的两个单词的输出。只有当他们以资本开始时才会再次出现。我尝试了一些类似的东西:

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

你看我怎么打结了。我怎样才能达到" Lumpert Mercury"而且"彼得"?

现在我需要两个,一个字或两个字后" Dr。"和" med。"。

我需要得到         "彼得"和" Lumpert Mercury"。

2 个答案:

答案 0 :(得分:2)

使用非捕获组,使其在原始捕获组中可选。

>>> import re
>>> s = "Dr. Peter is a great man. Dr. med. Lumpert Mercury is a great man."
>>> for m in re.finditer("(?:Dr|med)\.\s*([A-Z][a-z]+(?: [A-Z][a-z]+)?)", s):
...     print '%02d-%02d: %s' % (m.start(), m.end(), m.group(1))

00-09: Peter
30-50: Lumpert Mercury

答案 1 :(得分:1)

您需要使用以下regular expression: -

(?:Dr|med)\.\s*([A-Z][a-z]*)