以某种方式对正则表达式在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)
我错的任何想法?
非常感谢帮助!
答案 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
答案 1 :(得分:0)