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

如何修正从Ticker字段提取Symbol与Expiry的正则逻辑错误

问题解决

根因分析

  • 正则捕获组使用错误:你用括号定义了提取分组,但调用re.search().group()时未指定分组编号,默认返回整个匹配的字符串,而非括号内的目标内容:
    • Expiry_Pattern匹配结果会带上前缀横杠,比如返回-III而非III
    • Symbol_Pattern匹配结果会带上后缀的横杠和到期标识,比如返回ZEEL-III而非ZEEL
  • 手动循环遍历DataFrame的写法效率极低,不适合处理大数据量场景。

修正方案

方案1:仅调整现有代码的逻辑

修改正则的取值逻辑即可:

Expiry_Pattern = r'-([A-Z]{1,3})'
Symbol_Pattern = r'(.*?)-[A-Z]{1,3}'

for row in range(0, len(df)):
    ticker_val = df.iat[row, index_Ticker]
    # 指定取第一个捕获组的内容,而非全匹配结果
    Expiry = re.search(Expiry_Pattern, ticker_val).group(1)
    df.iat[row, index_Expiry] = Expiry
    Symbol = re.search(Symbol_Pattern, ticker_val).group(1)
    df.iat[row, index_Symbol] = Symbol

方案2:更高效的pandas原生写法(推荐)

直接用str.extract批量提取,不需要写循环,代码更简洁、性能更高:

# 一次正则匹配同时提取两个字段
df[['Symbol', 'Expiry']] = df['Ticker'].str.extract(r'^(.*?)-([A-Z]{1,3})')

正则含义说明:

  • ^ 匹配字符串开头
  • (.*?) 第一个捕获组,非贪婪匹配横杠前的所有内容,对应Symbol
  • - 匹配横杠分隔符
  • ([A-Z]{1,3}) 第二个捕获组,匹配1-3位大写字母,对应Expiry

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:54:02