我有一个关于正则表达式的快速问题,这让我发疯:
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.”之后的所有单词。或“医学”。如果单词以大写字母开头。 现在我需要字符串后两个单词的输出。两者都只有在它们以大写字母开头时才再次出现。我尝试了一些东西,比如:
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”和“Peter”?
现在我需要两者,“博士”后的一个词或两个词。和“医学”。
我需要得到 “Peter”和“Lumpert Mercury”。
请您参考如下方法:
使用非捕获组,使其在原始捕获组内可选。
>>> 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
