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

Roh*_*har 0 python regex data-cleaning

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

text = '52A, XYZ Street, ABC District, 2'
Run Code Online (Sandbox Code Playgroud)

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

输出应该是这样的

52A XYZ Street ABC District, 2'
Run Code Online (Sandbox Code Playgroud)

我试过了

re.sub(r',', ' ', text)
Run Code Online (Sandbox Code Playgroud)

但它正在取代所有逗号实例.

hee*_*ayl 5

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

,(?!\s+\d$)
Run Code Online (Sandbox Code Playgroud)

例:

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

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

编辑:

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

(?<!\s[\dA-Z]),(?!\s+\d,?)
Run Code Online (Sandbox Code Playgroud)

例:

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'
Run Code Online (Sandbox Code Playgroud)