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

2024-09-25 00:33:36 发布

您现在位置:Python中文网/ 问答频道 /正文

不知何故,我对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)之间的逗号,如下所示:

^{pr2}$

到目前为止,我一直在尝试,但是没有成功:

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

你知道我哪里错了吗?在

我们将非常感谢您的帮助!在


Tags: 字符串textnewnl字母方式peopleicon
2条回答

\w匹配a-zA-Z和{},因此正则表达式将替换所有逗号。您可以尝试以下regex,并替换为\1\2。在

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

Here is the DEMO.

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

所以,主要问题是\w同时匹配字母和数字。在

实际上,您可以利用环顾:

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

参见regex demo

(?<=[a-zA-Z])是一个正的lookbehind,它要求字母位于,之前,(?=[a-zA-Z\s])是一个正的lookahead,它要求在逗号后面有一个字母或空白。在

这是一个Python demo

^{pr2}$

如果仍要使用\w,可以使用反字符类内的相反类\W从中排除数字和下划线:

(?<=[^\W\d_]),(?=[^\W\d_]|\s)

another regex demo

相关问题 更多 >