正则表达式删除python中的数字之前的逗号

时间:2018-05-15 11:49:33

标签: python regex data-cleaning

我正在使用逗号作为分隔符来处理文件。但是,它有一个字段,地址,其中地址是x,y,z形式,这会导致问题,因为地址的每个部分都有一个新的列条目。地址紧跟成员_no,如1等数字,如2等。 Col1(地址),Col2(1位数)

(?:(?:[\n$]|^\d+$)|(?:^[\n\s])|(?:\d{1,3}(?:[:.\d$]|(?:\s(?=-))))|(?:--> ))+

我基本上想从地址字段中删除该号码前的所有逗号。

输出应该像

text = '52A, XYZ Street, ABC District, 2'

我试过

52A XYZ Street ABC District, 2'

但它正在替换逗号的所有实例。

4 个答案:

答案 0 :(得分:5)

使用零宽度负前瞻确保要替换的子串(此处为逗号)最后未跟{space(s)}{digit}

,(?!\s+\d$)

示例:

In [227]: text = '52A, XYZ Street, ABC District, 2'

In [228]: re.sub(',(?!\s+\d$)', '', text)
Out[228]: '52A XYZ Street ABC District, 2'

修改

如果您在,{space(s)}{digit}子字符串后面有更多逗号,并希望将它们全部保留,请利用负面的反馈来确保逗号前面没有{space}{digit<or>[A-Z]}

(?<!\s[\dA-Z]),(?!\s+\d,?)

示例:

In [229]: text = '52A, XYZ Street, ABC District, 2, M, Brown'

In [230]: re.sub('(?<!\s[\dA-Z]),(?!\s+\d,?)', '', text)
Out[230]: '52A XYZ Street ABC District, 2, M, Brown'

In [231]: text = '52A, XYZ Street, ABC District, 2'

In [232]: re.sub('(?<!\s[\dA-Z]),(?!\s+\d,?)', '', text)
Out[232]: '52A XYZ Street ABC District, 2'

答案 1 :(得分:2)

如果最后只是一个数字,你可以使用它。如果在最后一个逗号之后是多位数(数字3应该递增),则可以进行调整。

text = '52A, XYZ Street, ABC District, 2'
text = text[:-3].replace(",", "") + text[-3:]
print(text)

输出

52A XYZ Street ABC District, 2

答案 2 :(得分:2)

无需正则表达式。您可以查找,的最后一次出现并使用它,如:

text[:text.rfind(',')].replace(',', '') + text[text.rfind(','):]

答案 3 :(得分:1)

这个特别适用于货币。它不会删除日期和其他地方的逗号。

mystring="he has 1,00000,00 ruppees and lost 50,00,00,000,00,000,00 june 20, 1970 and 30/23/34 1, 2, 3"

print(re.sub(r'(?:(\d+?)),(\d+?)',r'\1\2',mystring))