Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式:替换字符串中的逗号,Python_Python_Regex_String_Replace - Fatal编程技术网

正则表达式:替换字符串中的逗号,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'

我对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'([\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])