检测python中没有正则表达式的字符串重复

检测python中没有正则表达式的字符串重复,python,recursion,Python,Recursion,我想要一个函数来检测字符串信誉,特别是 重复(“abcabc”) abc 重复(“aaaaaaa”) a 重复(“ababab”) ab 重复(“abcd”) abcd 我想用递归的方式来做,但我感到困惑 提前谢谢你的帮助 我正在尝试类似的东西 def repetition(r): if len(r) == 2: if r[0] == r[1]: return r[0] half = len(r) / 2 repetition(r[:ha

我想要一个函数来检测字符串信誉,特别是

重复(“abcabc”) abc

重复(“aaaaaaa”) a

重复(“ababab”) ab

重复(“abcd”) abcd

我想用递归的方式来做,但我感到困惑

提前谢谢你的帮助

我正在尝试类似的东西

def repetition(r):
    if len(r) == 2:
       if r[0] == r[1]:
          return r[0]
    half = len(r) / 2
    repetition(r[:half])
    if r[:half] == r[half:]:
       return r[:half]

也许有更好的方法,但我的第一个想法是:

def repetition(string):
    substring = ''
    for character in string:
        substring += character
        if len(string) % len(substring) == 0:
            if (len(string) / len(substring)) * substring == string:
                return substring

使用正则表达式:

import re
def repetitions(s):
    r = re.compile(r"(.+?)\1+")
    for match in r.finditer(s):
        if len(match.group()) != len(s): 
            return s

    return match.group(1)
测试:


那么ababa会是什么呢?我假设ababa会是ababa,我想要的是基本上检测重复字符串的子字符串,比如“abababab”会给我abI解决正则表达式的情况*,比如(ab)*匹配abababab,我需要先检测子字符串你的问题是什么?“请从头开始为我编写这个函数”?你可能正在寻找的算法:你所说的*子字符串是什么意思?既然子字符串是一个字符串,你怎么能将它相乘呢?这是一个很好的Python特性:
2*“test”==“testtest”
。哇,很酷的解决方案,我的错,我可以将字符串相乘。在最后一行的第二行,我假设你需要将(len(string)/len(substring))转换为intGreat解决方案谢谢~谢谢你的帮助,但我被禁止使用regex模式
repetitions("oblabla")
#output: "oblabla"

repetitions("blabla")
#output: "bla"