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

Python正则替换匹配内容去空格 拼接DataFrame中被分隔的数字

解决方法

你原有代码的核心问题有两个:一是用re.findall仅能提取匹配片段,无法完成原文本的替换回填;二是原正则适配性差,仅能匹配2-3段空格分隔的数字,无法覆盖更多分段的场景,且没有整列批量处理的逻辑。按以下步骤修改即可:

  • 替换正则匹配逻辑:改用re.sub实现匹配内容的动态替换,正则调整为r'\d+(?:\s+\d+)+',可匹配任意段数、被任意长度空格分隔的数字组合,匹配到片段后直接移除内部所有空格即可。
  • 批量处理DataFrame列:通过pandas Series的apply方法,把单文本处理函数应用到整列,无需手动逐行遍历。

完整实现代码

import re
import pandas as pd

def clean_spaced_numbers(text: str) -> str:
    # 回调函数处理每个匹配到的空格分隔数字段,移除内部所有空格
    return re.sub(
        pattern=r'\d+(?:\s+\d+)+',
        repl=lambda matched: matched.group().replace(' ', ''),
        string=text
    )

# 批量应用到目标列
df['a'] = df['a'].apply(clean_spaced_numbers)

效果验证

用你提供的样例数据测试:

# 构造测试数据
df = pd.DataFrame({
    'a': [
        'Fraxiparine 9 500 IU (anti-Xa)/1 ml',
        'Colobreathe 1 662 500 IU inhalačný prášok v tvrdej kapsule'
    ]
})

df['a'] = df['a'].apply(clean_spaced_numbers)
print(df)

输出完全符合预期:

a
0                  Fraxiparine 9500 IU (anti-Xa)/1 ml
1  Colobreathe 1662500 IU inhalačný prášok v tvrdej kapsule

说明:单独存在的单个数字(比如样例里1 ml的1)不会被匹配修改,只有被空格拆分的多段连续数字才会被拼接,不会出现误替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:45:58