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

Jupyter Notebook中Regex大小写敏感标识(?-i)失效问题求助

问题解决:Python Pandas中提取公司名称的正则报错

报错原因

你使用的正则表达式中的(?-i)是PCRE引擎支持的内联大小写修饰符,但Python的re引擎(Pandas字符串方法默认使用该引擎)对该语法兼容性存在问题,尤其是未全局开启忽略大小写匹配的场景下,该修饰符属于冗余内容且可能导致解析错误。

修改后的正则表达式

移除原正则中的(?-i),调整后的正则为:

\b(?:[A-Z][a-zA-Z()\.]*)(?:\s[A-Z][a-zA-Z()\.]*){1,4}

正则说明

  • \b:匹配单词边界
  • [A-Z][a-zA-Z()\.]*:匹配首字母大写,后续可包含大小写字母、括号、点号的单词
  • (?:\s[A-Z][a-zA-Z()\.]*){1,4}:匹配1-4个符合前面规则的单词(加上第一个单词,总共2-5个,符合原正则的数量要求)
  • 相比原正则,避免了末尾多余的空格匹配

修正后的代码

# 先处理空值,避免因NaN引发报错
combined_df['company'] = combined_df['subject_link_text'].fillna('').str.findall(r"\b(?:[A-Z][a-zA-Z()\.]*)(?:\s[A-Z][a-zA-Z()\.]*){1,4}")
# 若需要将匹配到的列表转为字符串格式,可添加以下代码
combined_df['company'] = combined_df['company'].str.join(', ')

额外优化建议

如果需要更精准匹配带有常见后缀的公司名称,可使用以下正则:

\b(?:[A-Z][a-zA-Z]*\s)+(?:Ltd\.|Inc\.|Company|Corp\.|Co\.)(?:\s*\([a-z]+\))?

该正则会优先匹配包含Ltd./Inc.等常见公司后缀的名称,同时可兼容后缀后的括号内容(如示例中的(wholesale))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:05:28