>>> 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', '']
您能解释(
和)
的目的吗?
答案 0 :(得分:3)
(..)
表示捕获组(又名"捕获括号")。当您想要从模式中提取值时,可以使用它们。在这种情况下,您正在使用re.split
函数,当模式具有捕获组时,该函数以特定方式运行。根据文件:
re.split(pattern,string,maxsplit = 0,flags = 0)
按照模式的出现拆分字符串。 如果捕获括号 在模式中使用,然后模式中的所有组的文本 也作为结果列表的一部分返回。
通常情况下,用于分割字符串的分隔符不会出现在结果中,就像在第二个示例中一样。但是,如果您使用()
,则组中捕获的文本也将位于拆分结果中。这就是为什么你在第一个例子中得到了很多' '
的原因。这就是您的小组([-\s.,;!?])
捕获的内容。
答案 1 :(得分:1)
在用于分割字符串的正则表达式中使用捕获组(()
),拆分将包括捕获的部分。
在你的情况下,你正在分裂一个或多个空格和/或标点符号,并捕获最后一个字符以包含在分割部分中,这似乎是一件奇怪的事情。我原以为你可能想要捕获所有的分隔符,它看起来像r"([-\s.,;!?]+)"
(捕获一个或多个字符空格/标点符号,而不是匹配一个或多个但只捕获最后一个)。