p字符串的句点w是任何正整数p,以便w[i]=w[i+p]每当定义该等式的两侧时.让我们来per(w)表示最小周期的大小w.我们说字符串w是周期性的iffper(w) <= |w|/2.
因此,非正式地,周期性字符串只是一个由重复至少两次的前缀组成的字符串.唯一的复杂因素是在字符串的末尾我们不需要前缀的完整副本.
例如,考虑字符串x = abcab.per(abcab) = 3as x[1] = x[1+3] = a,x[2]=x[2+3] = b并没有更小的时期.abcab因此,字符串不是周期性的.但是,字符串ababa是周期性的per(ababa) = 2.
随着越来越多的例子abcabca,ababababa并且abcabcabc也是周期性的.
是否有正则表达式来确定字符串是否是周期性的?
我真的不介意哪种正则表达式,但如果它有所作为,Python re支持的任何东西.
你需要的是反向引用
\b(\w*)(\w+\1)\2+\b
Run Code Online (Sandbox Code Playgroud)
这匹配甚至abcabca和ababababa.
请注意,机制的反向引用(在这种情况下是必要的)做出属于表达不正规文法.