Python 查找由字符串组成的重复子字符串(如果存在)

Python 查找由字符串组成的重复子字符串(如果存在),python,string,python-3.x,pattern-matching,Python,String,Python 3.x,Pattern Matching,在使用所有字符的同时,如何将普通字符串拆分为尽可能多的相同片段。比如说 a = "abab" 将返回ab,而 b= "ababc" 它将返回ababc,因为不能使用所有字母将其拆分为相同的部分。这与非常相似,但不完全相同,不同之处在于该问题只要求确定字符串是否由相同的重复子字符串组成,而不是重复子字符串(如果有)是什么 如果存在一个重复字符串,则该问题的已接受和到目前为止的执行可调整为返回重复字符串: def repeater(s): i = (s+s)[1:-1].find(s)

在使用所有字符的同时,如何将普通字符串拆分为尽可能多的相同片段。比如说

a = "abab"
将返回ab,而

b= "ababc"

它将返回ababc,因为不能使用所有字母将其拆分为相同的部分。

这与非常相似,但不完全相同,不同之处在于该问题只要求确定字符串是否由相同的重复子字符串组成,而不是重复子字符串(如果有)是什么

如果存在一个重复字符串,则该问题的已接受和到目前为止的执行可调整为返回重复字符串:

def repeater(s):
    i = (s+s)[1:-1].find(s)
    if i == -1:
        return s
    else:
        return s[:i+1]
示例:

>>> repeater('abab')
'ab'
>>> repeater('ababc')
'ababc'
>>> repeater('xyz' * 1000000)
'xyz'
>>> repeater('xyz' * 50 + 'q')
'xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzq'

这与非常相似,但不完全相同,区别在于该问题只要求确定字符串是否由相同的重复子字符串组成,而不是确定重复子字符串(如果有)是什么

如果存在一个重复字符串,则该问题的已接受和到目前为止的执行可调整为返回重复字符串:

def repeater(s):
    i = (s+s)[1:-1].find(s)
    if i == -1:
        return s
    else:
        return s[:i+1]
示例:

>>> repeater('abab')
'ab'
>>> repeater('ababc')
'ababc'
>>> repeater('xyz' * 1000000)
'xyz'
>>> repeater('xyz' * 50 + 'q')
'xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzq'

重复子字符串似乎没有前后字母,所以也可以这样:

In[4]: re.sub(r'^([a-z]+)\1$',r'\1','abab')
Out[4]: 'ab'
In[5]: re.sub(r'^([a-z]+)\1$',r'\1','ababc')
Out[5]: 'ababc' 
[a-z]+表示子字符串,\1表示重复

编辑:


重复子字符串似乎没有前后字母,所以也可以这样:

In[4]: re.sub(r'^([a-z]+)\1$',r'\1','abab')
Out[4]: 'ab'
In[5]: re.sub(r'^([a-z]+)\1$',r'\1','ababc')
Out[5]: 'ababc' 
[a-z]+表示子字符串,\1表示重复

编辑:


@obsidiange可能重复不,这不是重复。这个问题是寻找重复的子字符串,而不是字符数。@obsidiange的可能重复项否,这不是重复项。这个问题是寻找重复的子字符串,而不是字符计数。这只在子字符串恰好重复一次时有效。它不适用于ababab。编辑多个重复。这仅在子字符串恰好重复一次时有效。这对ababab不起作用。编辑多个重复。