正则表达式:替换字符串中的逗号,Python

时间:2016-03-09 16:00:51

标签: python regex string replace

以某种方式对正则表达式在python中的工作方式感到困惑,我希望替换前面带有字母的字符串中的所有逗号,后跟字母或空格。例如:

2015,1674,240/09,PEOPLE V. MICHAEL JORDAN,15,15
2015,2135,602832/09,DOYLE V ICON, LLC,15,15

第一行实际上有6列,而第二行有7列。因此,我试图用空白(N L)替换第二行(N,L)之间的逗号,如下所示:

2015,2135,602832/09,DOYLE V ICON LLC,15,15

这是我到目前为止所尝试的,但没有成功:

new_text = re.sub(r'([\w],[\s\w|\w])', "", text) 

我错的任何想法?

非常感谢帮助!

2 个答案:

答案 0 :(得分:5)

您使用的模式([\w],[\s\w|\w])在<{1}}之前消耗字词char(=字母数字或下划线,[\w]),然后匹配逗号,然后匹配(并再次,消耗)1个字符 - 空格,单词字符或文字,(在字符类中,管道字符被视为文字管道符号,而不是交替运算符)。

因此,主要问题是|匹配字母和数字。

您实际上可以利用外观:

\w

请参阅regex demo

(?<=[a-zA-Z]),(?=[a-zA-Z\s]) 是一个积极的外观,需要在(?<=[a-zA-Z])之前写一封信,而,是一个积极的前瞻,需要在逗号后面有一个字母或空格

这是Python demo

(?=[a-zA-Z\s])

如果您仍想使用import re p = re.compile(r'(?<=[a-zA-Z]),(?=[a-zA-Z\s])') test_str = "2015,1674,240/09,PEOPLE V. MICHAEL JORDAN,15,15\n2015,2135,602832/09,DOYLE V ICON, LLC,15,15" result = p.sub("", test_str) print(result) ,则可以在否定字符类中使用相反的类\w从中排除数字和下划线:

\W

请参阅another regex demo

答案 1 :(得分:0)

\w匹配a-zA-Z0-9,因此您的正则表达式将替换所有逗号。您可以尝试以下正则表达式,并替换为\1\2

([a-zA-Z]),(\s|[a-zA-Z])

Here is the DEMO.