正则表达式删除 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))
我正在处理一个使用逗号作为分隔符的文件。但是,它有一个字段 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))