python - 使用 python 正则表达式从字符串中提取名称

标签 python regex

我一直在尝试从字符串中提取名称,但似乎离成功还很远。

代码如下:

string = "555-1239Moe Szyslak(636) 555-0113Burns, C. Montgomery555 -6542Rev. Timothy Lovejoy555 8904Ned Flanders636-555-3226Simpson, Homer5553642Dr. Julius Hibbert"
regex = re.compile(r'([A-Z][a-z]+(?: [A-Z][a-z]\.)? [A-Z][a-z]+)')
print(regex.findall(string))

这是我得到的输出:

['Moe Szyslak', 'Timothy Lovejoy', 'Ned Flanders', 'Julius Hibbert']

最佳答案

即使是英文,提取人名也是出了名的困难。以下正则表达式解决了您的特定问题,但可能会在其他输入上失败(例如,它不会捕获带有破折号的名称):

re.findall(r"[A-Z][a-z]+,?\s+(?:[A-Z][a-z]*\.?\s*)?[A-Z][a-z]+", string)
#['Moe Szyslak', 'Burns, C. Montgomery', 'Timothy Lovejoy', 
# 'Ned Flanders', 'Simpson, Homer', 'Julius Hibbert']

还有标题:

TITLE = r"(?:[A-Z][a-z]*\.\s*)?"
NAME1 = r"[A-Z][a-z]+,?\s+"
MIDDLE_I = r"(?:[A-Z][a-z]*\.?\s*)?"
NAME2 = r"[A-Z][a-z]+"

re.findall(TITLE + NAME1 + MIDDLE_I + NAME2, string)
#['Moe Szyslak', 'Burns, C. Montgomery', 'Rev. Timothy Lovejoy', 
# 'Ned Flanders', 'Simpson, Homer', 'Dr. Julius Hibbert']

附带说明,除非您打算重用它,否则无需编译正则表达式。

关于python - 使用 python 正则表达式从字符串中提取名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55194224/

相关文章:

python - 带括号的正则表达式前瞻

python - Django默认用户权限

python - 如何使用 Unittest 测试测试 Python 脚本中的标准输入和标准输出?

python - 当我们将函数分配给名称时,内部会发生什么?

javascript - 如何从给定的正则表达式中删除定界符?

php - 正则表达式不能正确处理土耳其字符

用于评估日期范围的正则表达式

Python:正则表达式搜索

python - 在 Python 中将时间戳转换为 rfc 3339

python - django如何使从bash执行的python脚本将stdout写入文件?