我正在使用逗号作为分隔符来处理文件。但是,它有一个字段,地址,其中地址是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'
但它正在替换逗号的所有实例。
答案 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))