Skip to main content
 首页 » 编程设计

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

2024年08月27日34lhb25

我有一个关于正则表达式的快速问题,这让我发疯:

    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