【发布时间】:2021-04-25 05:32:29
【问题描述】:
我正在重新格式化大量销售数据。
每次销售都会显示商品名称、所售商品数量以及四舍五入到最接近整数的价格。
1 袋 20 个苹果售价 3 美元:
Apple/,20,3,
如果发生多次销售,销售数据将替换第一个结果之后的每个结果的项目名称。
4 袋 20 个苹果售价 3 美元: Apple/,20,3%20,3%20,3%20,3,
我需要显示每次销售的商品名称,而不是 % 符号
想要的结果:Apple/,20,3,Apple/,20,3,Apple/,20,3,Apple/,20,3,
到目前为止: 我已经为此努力了六个小时,并尝试了几种方法。
我曾想过在 python 中使用表达式 ([A-Za-z]+\/)?(\%)?(\d+\,\d+\,) 运行正则表达式替换
将\1\3 替换为完整匹配后会产生所需的结果,但是这只会将第一个捕获组应用于第三个捕获组的所有连续匹配的开头。
Apple/,20,3,20,3,20,3,20,3,
我怀疑这与捕获组和捕获对象之间的差异有关,但我一直在尝试找到一种方法将第一个捕获组附加到给定捕获组的捕获对象的每个外观(例如,追加捕获第 1 组到捕获第 3 组的每场比赛的开始。)
为了解决这个问题,我尝试了答案的修改版本:https://stackoverflow.com/questions/32670413/replace-all-matches-using-re-findall
import re
regex = re.compile('([A-Za-z]+\/)?(\%)?(\d+\,\d+\,)', re.S)
itemsales = 'Apple/20,3,%20,3,%20,3,%20,3,'
sales_fixed = regex.sub(lambda m: m.group().replace('%',"\1",1), myfile)
print(sales_fixed)
这将返回完全相同的结果
Apple/,20,3,20,3,20,3,20,3,
我怀疑这可能是由于在替换中错误地引用了我的捕获组
如何用产品名称替换百分号?
【问题讨论】: