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

Regex to remove commas before a number in python

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

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

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

输出应该像

52A XYZ Street ABC District, 2'

我试过了

re.sub(r',', ' ', text)

但它会替换所有逗号实例。

使用零宽度负先行确保要替换的子字符串(此处为逗号)末尾未跟有 {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'

如果末尾只有一个数字,您可以使用它。如果最后一个逗号后是多个数字(数字3应递增),则可以适应。

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

输出是

52A XYZ Street ABC District, 2

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

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

这是专门针对货币的。它不会删除日期和其他地方的逗号。

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'',mystring))