IDLE 1.1.4
>>> import re
>>> some_text = 'alpha, beta,,,,gamma delta'
>>> re.split('[, ]+', some_text)
['alpha', 'beta', 'gamma', 'delta']
# when the pattern doesn't contain parentheses, the returned values
# only include matched substrings but separators.
>>> re.split('([, ]+)', some_text)
['alpha', ', ', 'beta', ',,,,', 'gamma', ' ', 'delta']
# returned values include separators and I can guess how it works.
>>> re.split('([, ])+', some_text)
['alpha', ' ', 'beta', ',', 'gamma', ' ', 'delta']
# Now I cannot even guess what is going on here.
问题> '([, ]+)'
和'([, ])+'
之间有什么区别?
它如何影响返回值?
答案 0 :(得分:4)
前者将“”和“,”的所有实例放入一个组中,而后者返回一个仅包含最后一个的组。
答案 1 :(得分:3)
([, ]+)
说“匹配一个或多个逗号和/或空格并将它们作为一个组捕获”,因此在第二个示例中,您将看到在一个组中返回的整个分隔符字符串。
([, ])+
说“匹配一个逗号或空格,并捕获一组或多组这些”。所以在你的第三个例子中,每个分隔符都被捕获在它自己的组中,而你每次只得到最后一个。
答案 2 :(得分:2)
如果您的字符串中有,,,,
,那么当您的模式为([, ]+)
时,此论坛将返回,,,,
,如果您的模式为([, ])+
,则会返回,
}
答案 3 :(得分:1)
观看您的匹配群组。
([, ]+)
这会匹配一次或多次,
或空格,并将它们全部返回,从而捕获这些字符的长链。([, ])+
这会匹配空格或,
并将其作为一组返回。答案 4 :(得分:1)
将您的逗号更改为ABCD,如下所示:
some_text2 ='alphaA betaABCDgamma delta'
re.split('([ABCD])+',some_text2)
['alpha','','beta','D','gamma','','delta']
它实际上匹配每个逗号,但是作为1个字符组。 +将它变成一个贪婪的匹配,直到它不再匹配字符类中的字母。
尝试不使用+
re.split('([ABCD])',some_text2)
[ '阿尔法', '一个', ', '', “测试版”, '一个', ', 'B', ', 'C', ', 'd', “伽马”, '', ', '', ', '', '增量']