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

如何编写Python正则表达式匹配整数与分数以拆分Pandas列文本

解决Pandas文本列拆分问题

问题分析

你的文本行结构包含两种核心模式:开头是整数或分数,中间是物品描述,接着是带$或不带$的数字,部分行末尾还有额外物品。之前的正则错误在于强制捕获三个数字组,但实际每行仅包含两个核心数值(开头的数量、后面的数字),导致匹配失败。

调整后的正则表达式

使用以下正则可匹配所有行的整数、分数及数字:

^(\d+(?:\/\d+)?) \s*(.*?) \s*\$?(\d+)\s*(.*)?$

正则细节解释

  • (\d+(?:\/\d+)?):捕获开头的数量,支持整数(如2、5)和分数(如9/10),(?:\/\d+)是可选非捕获组,专门匹配分数结构
  • \s*:匹配任意数量的空白字符,兼容不同的空格间距
  • (.*?):非贪婪匹配第一个物品的描述文本(如Table、Chairs)
  • \$?:匹配可选的$符号,适配第一行的$75格式
  • (\d+):捕获后面的数字(如75、875)
  • (.*)?:可选捕获末尾的额外物品(如Teabags、Dishwasher tablets)

Pandas代码示例

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'text': [
        '2 Table $75',
        '5 Chairs 875 Teabags',
        '9/10 gel 125 Dishwasher tablets'
    ]
})

# 拆分文本到多列
df[['quantity', 'item1', 'number', 'item2']] = df['text'].str.extract(r'^(\d+(?:\/\d+)?) \s*(.*?) \s*\$?(\d+)\s*(.*)?$')

print(df)

最终输出结果

textquantityitem1numberitem2
2 Table $752Table75
5 Chairs 875 Teabags5Chairs875Teabags
9/10 gel 125 Dishwasher tablets9/10gel125Dishwasher tablets

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:10:59