regex 使用正则表达式查找整个文本中的重复单词

wwtsj6pe  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(132)

我想找到文本中重复的所有单词集。例如:

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个重复的单词,而且不能搜索整个文本。

bweufnob

bweufnob1#

你的尝试没有考虑到重复单词之间的其他单词。
要解释它们,可以使用regex \b(\w+)\b(?=.*\b\1\b)。它匹配输入字符串中后面某个地方跟有相同单词的单词。
注意,re.findall将返回book三次,因为它在input中重复了四次(最后一次没有返回,因为它后面没有word book anywhere)。为了适应这种情况,我们可以使用转换成集合,然后再转换回列表。

import re
string21="we read all sort of books, we read sci-fi books, historical books, advanture books and etc."
list(set(re.findall(r'\b(\w+)\b(?=.*\b\1\b)', string21)))
# ['we', 'books', 'read']

重要提示:此正则表达式只查找由[a-zA-Z0-9_]组成的单词的重复。如果需要包含一些额外的符号(例如',以容纳像“you're”这样的单词),你的正则表达式应该更复杂一点:

(?<![\w'])([\w']+)(?![\w'])(?=.*(?<![\w'])\1(?![\w']))

相关问题