([])+和[] +之间有什么区别?

时间:2018-01-02 01:32:34

标签: python regex

>>> sentence = "Thomas Jefferson began building Monticello at the age of 26."
>>> tokens1 = re.split(r"([-\s.,;!?])+", sentence)
>>> tokens2 = re.split(r"[-\s.,;!?]+", sentence)
>>> tokens1 = ['Thomas', ' ', 'Jefferson', ' ', 'began', ' ', 'building', ' ', 'Monticello', ' ', 'at', ' ', 'the', ' ', 'age', ' ', 'of', ' ', '26', '.', '']
>>> tokens2 = ['Thomas', 'Jefferson', 'began', 'building', 'Monticello', 'at', 'the', 'age', 'of', '26', '']

您能解释()的目的吗?

2 个答案:

答案 0 :(得分:3)

正则表达式中的

(..)表示捕获组(又名"捕获括号")。当您想要从模式中提取值时,可以使用它们。在这种情况下,您正在使用re.split函数,当模式具有捕获组时,该函数以特定方式运行。根据文件:

  

re.split(pattern,string,maxsplit = 0,flags = 0)

     

按照模式的出现拆分字符串。 如果捕获括号   在模式中使用,然后模式中的所有组的文本   也作为结果列表的一部分返回。

通常情况下,用于分割字符串的分隔符不会出现在结果中,就像在第二个示例中一样。但是,如果您使用(),则组中捕获的文本也将位于拆分结果中。这就是为什么你在第一个例子中得到了很多' '的原因。这就是您的小组([-\s.,;!?])捕获的内容。

答案 1 :(得分:1)

在用于分割字符串的正则表达式中使用捕获组(()),拆分将包括捕获的部分。

在你的情况下,你正在分裂一个或多个空格和/或标点符号,并捕获最后一个字符以包含在分割部分中,这似乎是一件奇怪的事情。我原以为你可能想要捕获所有的分隔符,它看起来像r"([-\s.,;!?]+)"(捕获一个或多个字符空格/标点符号,而不是匹配一个或多个但只捕获最后一个)。