我想找到文本中重复的所有单词集。例如:
string21="we read all sort of books, we read sci-fi books, historical books, advanture books and etc."
现在regex应该输出这些单词:我们,读,书
我怎么能得到这个结果?
我试着用这个:
pattern="\b(\w+)\s+\1\b"
match=re.findall(pattern,string)
但它并没有像我预期的那样工作,只显示了2个重复的单词,而且不能搜索整个文本。
1条答案
按热度按时间bweufnob1#
你的尝试没有考虑到重复单词之间的其他单词。
要解释它们,可以使用regex
\b(\w+)\b(?=.*\b\1\b)
。它匹配输入字符串中后面某个地方跟有相同单词的单词。注意,
re.findall
将返回book
三次,因为它在input中重复了四次(最后一次没有返回,因为它后面没有word book anywhere)。为了适应这种情况,我们可以使用转换成集合,然后再转换回列表。重要提示:此正则表达式只查找由
[a-zA-Z0-9_]
组成的单词的重复。如果需要包含一些额外的符号(例如'
,以容纳像“you're”这样的单词),你的正则表达式应该更复杂一点: