Skip to main content
 首页 » 编程设计

Python 正则表达式 : Finding First and Last Names

2025年05月04日28soundcode

我在一个字符串中有一堆名字,每个名字和姓氏都位于“>”和“>”中。因此,字符串可能是,例如 'uselessdataetc<Michael Bloomberg>blahblah<William Handler>blahblah'我希望它返回 'Michael Bloomberg' , 'William Handler'

这是我正在使用的正则表达式:

nameregex = '<([a-z]+|\s)*>' 

我在使用正则表达式时使用了 re.IGNORECASE。它目前只返回姓氏。所以它返回“Bloomberg”、“Handler”。

谁能看出为什么会这样?

请您参考如下方法:

搜索:

r'<([^>]+)>' 

而是找到任何不是结束字符的东西。

演示:

>>> nameregex = re.compile(r'<([^>]+)>') 
>>> nameregex.findall('uselessdataetc<Michael Bloomberg>blahblah<William Handler>blahblah') 
['Michael Bloomberg', 'William Handler'] 

您的正则表达式在每组字母 或 空格周围使用一个捕获组,并且只有 last 这样的匹配在 <...> 中返回尖括号,因为捕获组即使匹配多个模式也不会相乘。 Michael Bloomberg是 3 场比赛; (Michael)( )(Bloomberg)并且只为捕获组返回最后一个这样的匹配项。

您可以使用以下方式使您的版本工作:

nameregex = '<((?:[a-z]+|\s)*)>' 

相反,或者在字符类中包含空格并删除外部通配符:

nameregex = '<([a-z\s]+)>'