我有一个文件,其中用逗号分隔,但数字也使用逗号分隔它们。例如:
01-01-2010,a,""0.0"",c,d,""1,234,567.00"",1,2,3,4
其中数字在双引号中,或者
01-01-2010,a,""3,123.00"",c,d,""1,234,567.00"",1,2,3,4
有一个简单的正则表达式,使用Python的re.sub
仅删除数字内的逗号吗?换句话说,我正在寻求转换为
01-01-2010,a,0.0,c,d,1234567.00,1,2,3,4
01-01-2010,a,3123.00,c,d,1234567.00,1,2,3,4
,最后使用.split()
拆分为列
因此,如果re.sub('"+\d+,\d+"+', ?, s)
是有问题的字符串,那么我尝试过的一些想法是s
,但这似乎是不完整的解决方案。
答案 0 :(得分:3)
您可以使用re.findall
:
import re
s = '01-01-2010,a,""0.0"",c,d,""1,234,567.00"",1,2,3,4'
new_data = ','.join([i.replace(',', '') for i in re.findall('(?<="")[,\d\.]+(?="")|[\w\d\-]+', s)])
输出:
'01-01-2010,a,0.0,c,d,1234567.00,1,2,3,4'
答案 1 :(得分:1)
对于纯正则表达式解决方案,您可以使用
""|,(?=(?:(?!"").)*?"",)
并替换为空字符串。
https://regex101.com/r/LVs4sT/1
它与""
或最后跟"",
的逗号匹配,以确保逗号在""<data>""
节内。
str = '01-01-2010,a,""0.0"",c,d,""1,234,567.00"",1,2,3,4'
re.sub(r'""|,(?=(?:(?!"").)*?"",)', '', str)
如果""
也可以出现在字符串的末尾,则使用(?=,|$)
而不是仅匹配前瞻末尾的逗号。