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

Pandas如何提取多括号内以数字开头的子串 解决正则贪婪匹配问题

解决方案

直接调整正则规则即可解决两个问题:

  • 替换原正则的贪婪匹配模式,匹配时遇到第一个右括号就终止,不会跨括号抓取多组内容
  • 增加开头数字校验,仅保留左括号后紧跟数字的括号内内容

修正后代码

import pandas as pd

cols = ['a', 'b']
data = [
    ['xyz - (4 inch), (four inch)', 'abc'],
    ['def', 'ghi'],
    ['xyz - ( 5.5 inch), (five inch)', 'abc'],
]
df = pd.DataFrame(data=data, columns=cols)
# 替换为修正后的正则
df['c'] = df['a'].str.extract(r"\((\d[^)]*)\)")
print(df)

正则规则说明

使用的正则为\((\d[^)]*)\),各部分逻辑:

  • \(:匹配左括号字符
  • 捕获分组(即最终提取的内容):
    • \d:要求内容必须以数字开头,左括号后如果是空格、字母等非数字字符则不匹配
    • [^)]*:匹配任意数量的非右括号字符,遇到第一个右括号就停止,从根源避免贪婪匹配跨括号的问题
  • \):匹配右括号字符

运行结果

执行后输出和期望完全一致:

a    b       c
0     xyz - (4 inch), (four inch)  abc  4 inch
1                             def  ghi     NaN
2  xyz - ( 5.5 inch), (five inch)  abc     NaN

如果后续规则调整,允许括号内数字前存在空格等空白字符,可以把正则修改为\(\s*(\d[^)]*)\)适配场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:21:17