You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则从Pandas DataFrame中提取姓名对应地点子串

提取姓名后"of"开头至第二个逗号的地点信息

假设你的任命通知文本格式类似 APPOINTMENT OF DAVID MERRIGAN, of NEW YORK, NY, to the position...,结合你已经能提取大写姓名的情况,用下面的正则配合Pandas就能搞定目标地点提取:

核心正则表达式

针对姓名后带逗号+of的场景:

(?<=[A-Z]+(?:\s[A-Z]+)+, of ).*?(?=,.*?,)

如果你的文本里姓名和of之间没有逗号(比如DAVID MERRIGAN of NEW YORK, NY, ...),就用这个版本:

(?<=[A-Z]+(?:\s[A-Z]+)+ of ).*?(?=,.*?,)

Pandas 代码示例

假设你的DataFrame存储通知文本的列叫notice_text,直接用str.extract提取:

import pandas as pd

# 模拟你的数据
df = pd.DataFrame({
    'notice_text': [
        "APPOINTMENT OF DAVID MERRIGAN, of NEW YORK, NY, to the Board of Directors",
        "NAMING OF SARAH JANE SMITH, of LOS ANGELES, CA, as Senior Executive"
    ]
})

# 提取地点列
df['location'] = df['notice_text'].str.extract(r'(?<=[A-Z]+(?:\s[A-Z]+)+, of ).*?(?=,.*?,)')

# 查看结果
print(df[['notice_text', 'location']])

正则逻辑拆解

  • (?<=[A-Z]+(?:\s[A-Z]+)+, of ):正向后顾断言,确保我们从「大写姓名(支持多部分,比如带中间名)+ ", of "」之后开始匹配,避免抓错位置
  • .*?:非贪婪匹配,只取到目标结束位置的内容,不会把后面的文本也拉进来
  • (?=,.*?,):正向前瞻断言,匹配到「第二个逗号」就停止,刚好截取到我们要的地点范围

为什么之前返回-1?

返回-1一般是正则完全没匹配到内容,检查这几点:

  1. 文本里是否真的有「of开头+后面至少两个逗号」的结构?
  2. 姓名和of之间的分隔符是不是和正则里的不一致?(比如你文本里是空格,正则写了逗号)
  3. 是不是用了贪婪匹配(比如把.*?写成.*),导致匹配范围跑过头?

内容的提问来源于stack exchange,提问作者xrichervis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:57:22