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

时间:2017-03-26 22:36:33

标签: python string python-3.x pattern-matching

在使用所有字符时,您将如何将普通字符串拆分为尽可能多的相同部分。例如

a = "abab"

将返回"ab",而使用

b= "ababc"

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

2 个答案:

答案 0 :(得分:2)

这与How can I tell if a string repeats itself in Python?非常相似,但不完全相同 - 不同之处在于该问题只是要求确定一个字符串是否由相同的重复子字符串组成,而不是重复的子字符串(如果有的话)是

对于该问题,已接受(以及到目前为止best表演)answer可以适用于返回重复字符串(如果有的话):

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'

答案 1 :(得分:0)

似乎重复子字符串没有pre和after字母,所以它也可能是这样的:

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表示重复。

编辑:

re.sub(r'^([a-z]+)\1{1,}$',r'\1','abcabcabcabc')
'abc'