python - 使用 python 正则表达式从字符串中提取名称
问题描述
我一直在尝试从字符串中提取名称,但似乎还没有接近成功。
这是代码:
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']
附带说明一下,除非您打算重用它,否则无需编译正则表达式。
推荐阅读
- javascript - Typescript 中的“HTMLElement”类型不存在属性“内容”
- quarkus - Quarkus 应用程序启动 bean 初始化两次
- github - 我是否拥有私有 Github 存储库中的代码?
- oracle - 如何在 oracle 查询中使用 into 子句为变量分配多个值?
- python - 用for循环python求解方程
- selenium - 如何通过 Selenium 使用 css-selector 查找元素
- php - VS Code PHP Intelephense 扩展是否有配置标志来关闭参数提示?
- python - 使用 Pyspark 从关系数据集构建层次结构
- python - 创建实例时默认调用 __init__
- c# - 使用 FluentFTP 将文件直接流式传输到新的 ZIP 存档以节省内存