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
相关产品推荐
相关产品推荐

