使用Python Regex提取字符串中姓名返回空列表该如何解决
正则提取姓名问题修复方案
原代码返回空列表的原因
你使用的正则末尾包含正向预查规则(?=\s\(),该规则要求匹配内容的后方必须跟随「空格+左括号」字符,但你提供的测试字符串中不存在左括号,因此始终无法命中匹配结果,返回空列表。
修复后的实现代码
import re string = """Amy is 5 years old, and her sister Mary is 2 years old. Ruth and Peter, their parents, have 3 kids.""" # 基础人名匹配规则:匹配首字母大写、后续为小写字母的独立单词 res = re.findall(r'\b[A-Z][a-z]+\b', string) print(res)
运行输出结果:
['Amy', 'Mary', 'Ruth', 'Peter']
扩展适配规则
如果需要匹配包含中间名、缩写点的人名(如J.K. Rowling、Mary Ann),可以调整正则为:
res = re.findall(r'\b[A-Z][a-z]*(?:\.[A-Z][a-z]*|\s[A-Z][a-z]*)*\b', string)
内容的提问来源于stack exchange,提问作者Mohamed Gamal
相关产品推荐
相关产品推荐

