Python 正则表达式"and not"



在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)拆分更有效。

最新更新