仅在特定位置删除逗号

时间:2018-09-19 04:26:46

标签: python regex

我有一个文件,其中用逗号分隔,但数字也使用逗号分隔它们。例如:

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,但这似乎是不完整的解决方案。

2 个答案:

答案 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)

如果""也可以出现在字符串的末尾,则使用(?=,|$)而不是仅匹配前瞻末尾的逗号。