在Python中,我想在逗号上拆分,但如果后面跟着尾随空格,则不拆分
在逗号上拆分我有
(?:[^,]+)
我正在寻找类似的东西
(?:[^,]+)(?!:[^, ]+)
示例情况:
"Me, Myself & Irene,The Cable Guy"
应导致:
"Me, Myself & Irene"
"The Cable Guy"
一个消极的前瞻断言,(?!...)
.这匹配任何没有指定模式的位置。要拆分不跟空格的逗号,那就是:
,(?! )
对于re.split()
,您不需要任何其他分组。
演示:
>>> import re
>>> re.split(r',(?! )', "Me, Myself & Irene,The Cable Guy")
['Me, Myself & Irene', 'The Cable Guy']
让我解释一下原始方法的问题所在。
您将 1+ 非逗号符号块与 [^,]+
匹配,并决定如果您添加 (?!:[^, ]+)
,它将允许您匹配后面跟逗号的逗号。但是,(?:[^,]+)(?!:[^, ]+)
匹配 1+ 非逗号块,这些块后面没有:
后跟 1 个或多个字符,而不是 ,
和空格。
您真正可以尝试的是匹配一个后跟至少 1 个空格的,
,然后再次匹配非逗号块,0+ 次:
re.findall(r'[^,]+(?:,s+[^,]+)*', s)
查看正则表达式演示
请参阅Python演示:
import re
rx = r"[^,]+(?:,s[^,]+)*"
s = "Me, Myself & Irene,The Cable Guy"
print(re.findall(rx,s))
# => ['Me, Myself & Irene', 'The Cable Guy']
但是,使用,(?!s)
拆分更有效。