Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 寻找重复子串_Python_Regex_Repeat - Fatal编程技术网

Python 寻找重复子串

Python 寻找重复子串,python,regex,repeat,Python,Regex,Repeat,具有任意字符串的,如 hello hello hello I am I am I am your string string string string of strings 我是否可以找到由空格分隔的重复子字符串(编辑)?在这种情况下,它将是“你好”、“我是”和“字符串” 我一直在想这个问题有一段时间了,但我仍然找不到任何真正的解决办法。 我也读过一些关于这个主题的文章,并偶然发现了后缀树,但即使我需要找到每一个重复,例如重复数大于2,这能帮助我吗 如果是这样,是否有一些python库可以处

具有任意字符串的,如

hello hello hello I am I am I am your string string string string of strings
我是否可以找到由空格分隔的重复子字符串(编辑)?在这种情况下,它将是“你好”、“我是”和“字符串”

我一直在想这个问题有一段时间了,但我仍然找不到任何真正的解决办法。 我也读过一些关于这个主题的文章,并偶然发现了后缀树,但即使我需要找到每一个重复,例如重复数大于2,这能帮助我吗

如果是这样,是否有一些python库可以处理后缀树并对其执行操作

编辑:很抱歉我不够清楚。所以我想说清楚-我在寻找重复的子字符串,这意味着字符串中的序列,例如,在正则表达式中,可以用+或{}通配符替换。所以,如果我必须从列出的字符串中生成正则表达式,我会这样做

(hello ){3}(I am ){3}your (string ){4}of strings 

要查找重复两次或多次的两个或多个字符(每个字符由空格分隔),请使用:

(.{2,}?)(?:\s+\1)+
下面是一个测试字符串的工作示例:

编辑:通过添加使捕获组中的量词不情愿?匹配尽可能短的匹配(即现在匹配“字符串”而不是“字符串”)


编辑2:为更清晰的结果添加了所需的空格分隔符

我认为可能是重复的。实际上,在我发布这篇文章之前,我已经读过这个问题,但我没有想到如何将解决方案转换为适合我的问题。没错,我只关注我真正想要的输出。很抱歉。不确定您的意思是否类似,结果在命名组“result”中。当然
的字符串
丢失了…@Hyperboreus
m I a
不是一个重复的子字符串,由spacesWorks为他的情况分隔,但我会使{2,}不贪婪,否则它将匹配“a b”中的“a”。对。因为它是匹配“字符串字符串”,而不是“字符串”哇,就像魔术一样!在我接受你的回答之前,你介意解释一下正则表达式吗?我理解为什么我们有(.{2,}?),但是下面的括号?“?:”表示不记得,\s+足够清楚,但\1?这是不是说“从第1组中获取您所发现的内容并再次查找?”(?:…)是一个非捕获组。它就像(…)一样,只是这场比赛不记得也不可接近。在这种情况下,(:…)或(…)都会起作用,但出于习惯,如果我不需要捕获组,我总是让组不捕获它们。捕获第一个组(.{2,}?),对它的反向引用(\1)确保只匹配重复的字符串。以下是关于组、捕获和反向引用的教程: