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函数接收匹配对象mm.group(0)获取完整的匹配内容(比如{ 16812})- 通过
replace('}', ' | }')在原匹配内容的末尾插入|,得到目标格式
两种方法都只会修改{ 数字}格式的内容,其他格式的字符串(比如{value 16812})会保持不变。
内容的提问来源于stack exchange,提问作者qbbq
相关产品推荐
相关产品推荐

