正则表达式:替换字符串中的逗号,Python
我对python中正则表达式的工作方式感到莫名其妙,我希望替换字符串中的所有逗号,这些字符串前面是字母,后面是字母或空格。例如:正则表达式:替换字符串中的逗号,Python,python,regex,string,replace,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列。因此,我试图用空格(nl)替换第二行(N,L)之间的逗号,如下所示: 这是我迄今为止尝试过的,但没有成功: new_text = re.sub(r'
2015,1674,240/09,PEOPLE V. MICHAEL JORDAN,15,15
2015,2135,602832/09,DOYLE V ICON, LLC,15,15
第一行实际上有6列,而第二行有7列。因此,我试图用空格(nl)替换第二行(N,L)之间的逗号,如下所示:
这是我迄今为止尝试过的,但没有成功:
new_text = re.sub(r'([\w],[\s\w|\w])', "", text)
你知道我哪里错了吗
非常感谢您的帮助 您使用的模式,
([\w],\s\w |\w])
在,
之前使用一个单词字符(=字母数字或下划线,[\w]
),然后匹配逗号,然后匹配(再次,使用)一个字符-空白、单词字符或文字
(在character类中,管道字符被视为文字管道符号,而不是交替运算符)
因此,主要问题是\w
同时匹配字母和数字
实际上,您可以利用周围环境:
(?<=[a-zA-Z]),(?=[a-zA-Z\s])
如果仍要使用\w
,可以在否定字符类中使用相反的类\w
,从中排除数字和下划线:
(?<=[^\W\d_]),(?=[^\W\d_]|\s)
(?\w
匹配a-z
、a-z
和0-9
,因此您的正则表达式将替换所有逗号。您可以尝试以下正则表达式,并替换为\1\2
([a-zA-Z]),(\s|[a-zA-Z])
感谢您花时间详细描述您的方法!我的理解是,[a-zA-Z]匹配字母和[a-zA-Z\s]字母或空格。但您为什么不使用|来表达or语句呢?其次,“1”之间有什么区别我没有在中使用|替换符号,因为它不是必需的,替换关系在正字符类中是默认的(即,[123]
匹配1
,或2
,或3
)。2)(?非常感谢您的澄清!我使用了您的正则表达式,它工作得非常完美。
(?<=[^\W\d_]),(?=[^\W\d_]|\s)
([a-zA-Z]),(\s|[a-zA-Z])