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

如何用Python正则提取字符串列表的ID、日期和价格生成DataFrame

解决正则提取价格及生成DataFrame的方案

修正正则表达式

原有正则存在两个问题:

  1. 日期正则要求月、日必须为2位,无法匹配1/11/2020这类单数字月/日的格式
  2. 价格正则会匹配所有整数、浮点数,会把ID后缀、行首的0、1等无关数字提取出来,导致价格列表数据混乱

修正后的正则如下:

import re
import pandas as pd

# 支持1/2位的月、日匹配
date_reg_exp = re.compile(r'\d{1,2}/\d{1,2}/\d{4}')
# 利用零宽断言,仅匹配 ;3; 后面的带小数价格,排除其他数字干扰
price_reg_exp = re.compile(r'(?<=;3;)\d+\.\d+')

如果后续价格可能出现不带小数的整数格式,可以把价格正则调整为r'(?<=;3;)\d+(?:\.\d+)?'即可兼容。


调整数据处理逻辑

遍历每行时将同组的日期和价格一一对应,和ID拼接成元组存入结果列表,最后直接转换为DataFrame:

result = []
for data_row in self._data:
    # 提取当前行ID
    bbg_id = data_row.split('|')[0]
    # 提取当前行所有日期
    date_list = [x.group() for x in date_reg_exp.finditer(data_row)]
    # 提取当前行所有价格
    price_list = [x.group() for x in price_reg_exp.finditer(data_row)]
    # 日期价格配对后和ID组合存入结果
    for date, price in zip(date_list, price_list):
        result.append((bbg_id, date, price))

# 转换为DataFrame,可自定义列名
df = pd.DataFrame(result, columns=['ID', '日期', '价格'])

输出效果

处理后的DataFrame和需求格式完全一致:

ID          日期      价格
0  ID1  12/11/2020  10.0000
1  ID1  06/11/2021   9.0000
2  ID2   1/11/2020  11.0000
3  ID2   1/11/2021  12.0000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:24:02