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

Python Pandas中用正则匹配替换{数字}为{数字 | }的方法

解决方法

针对你在Pandas DataFrame中替换特定格式字符串的需求,这里提供两种可行的实现方式:

方法一:利用正则捕获组直接替换

这种方式通过将目标格式拆分为多个捕获组,在替换时保留原数字并插入竖线:

import pandas as pd

# 构造示例DataFrame
data = {
    'content': [
        '{ 16812},',
        '{ 16812},',
        '{ 16813},',
        '{ 16819},',
        '{ 16812},',
        '{value 16812},',
        '{value 16812]},'
    ]
}
df = pd.DataFrame(data)

# 定义正则:匹配{ 数字}格式,数字最多6位(支持整数或小数)
pattern = r'(\{\s)(\d{1,6}(?:\.\d+)?)(\})'
# 替换为{ 数字 | }
df['content'] = df['content'].str.replace(pattern, r'\1\2 | \3', regex=True)

# 查看结果
print(df['content'])

正则说明

  • (\{\s):捕获开头的{ (左大括号加空格)
  • (\d{1,6}(?:\.\d+)?):捕获1-6位数字,可选带小数部分(如果只需要整数,去掉(?:\.\d+)?即可)
  • (\}):捕获结尾的}

替换时通过\1、\2、\3引用捕获的内容,插入|后重组目标格式。

方法二:利用匹配对象动态替换

如果更习惯使用你原有的正则,可以通过回调函数获取匹配结果,再修改格式:

import pandas as pd
import re

# 构造示例DataFrame
data = {
    'content': [
        '{ 16812},',
        '{ 16812},',
        '{ 16813},',
        '{ 16819},',
        '{ 16812},',
        '{value 16812},',
        '{value 16812]},'
    ]
}
df = pd.DataFrame(data)

# 定义正则(基于你提供的规则,限制数字最多6位)
pattern = r'\{\s\d{1,6}(?:[\d]*\.\d+|[\d]*)\}'
# 替换:将匹配到的{ 数字}改为{ 数字 | }
df['content'] = df['content'].apply(
    lambda x: re.sub(pattern, lambda m: m.group(0).replace('}', ' | }'), x)
)

# 查看结果
print(df['content'])

逻辑说明

  • re.sub的第二个参数用lambda函数接收匹配对象m
  • m.group(0)获取完整的匹配内容(比如{ 16812})
  • 通过replace('}', ' | }')在原匹配内容的末尾插入|,得到目标格式

两种方法都只会修改{ 数字}格式的内容,其他格式的字符串(比如{value 16812})会保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:24:30