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

如何在Pandas中使用正则表达式提取指定字段后的作者名?

用正则表达式提取Pandas列中的作者名

嘿,我来帮你搞定这个正则提取的问题~你之前用split的方法可行,但正则其实更灵活,能适配更多格式变化的情况。

首先,你之前尝试的df.str.extract("first author:(.*?)")没成功,大概率是因为.*?是非贪婪匹配,它会匹配尽可能少的字符,在没有明确终止标记的情况下,可能只匹配到空字符串或者很短的内容。咱们调整一下正则表达式就能解决:

正确的正则写法

你需要匹配first author:之后的所有内容直到字符串结尾,结合你的文本格式,用下面的代码就可以:

# 假设你的目标列名为'EntrezUID',和你之前用的一致
df['author_name'] = df['EntrezUID'].str.extract(r'first author:\s*(.*)$')

代码细节解释

  • r'first author:\s*(.*)$':
    • r 表示原始字符串,避免转义字符的干扰;
    • first author: 精确匹配固定前缀;
    • \s* 匹配0个或多个空格(适配冒号后可能有空格的情况,比如first author: REAGAN RL);
    • (.*) 捕获所有后续字符(贪婪匹配,会一直取到字符串末尾);
    • $ 匹配字符串结尾,确保我们取到的是first author:之后的全部内容。

示例验证

假设你的数据框是这样的:

import pandas as pd

data = {
    'EntrezUID': [
        'create date:1953/01/01 | first author:REAGAN RL',
        'create date:2000/05/10 | first author:SMITH JD',
        'first author:WILSON AE'  # 极端情况:只有作者信息
    ]
}
df = pd.DataFrame(data)

# 提取作者名
df['author_name'] = df['EntrezUID'].str.extract(r'first author:\s*(.*)$')

print(df)

输出结果会是:

EntrezUID author_name
0  create date:1953/01/01 | first author:REAGAN RL    REAGAN RL
1  create date:2000/05/10 | first author:SMITH JD      SMITH JD
2                          first author:WILSON AE     WILSON AE

进阶适配:如果作者名后还有其他内容

如果你的文本格式偶尔会出现first author:XXX | other info:YYY这种情况,只需要把正则调整为:

df['author_name'] = df['EntrezUID'].str.extract(r'first author:\s*(.*?)\s*\|')

这里的.*?非贪婪匹配会在遇到下一个|时停止,精准提取作者名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:13:14