bananabanana - слово banana
bananabananaban - слово banana
banana - слово banana
Схематически как я думаю это так -
"^(первая группа) ((вторая группа) \1)* $"
"^(первая группа) ((вторая группа) \1)* $"
>>> import re >>> >>> def f(s): ... match = re.search(r'^((.+)\2)+', s) ... return (match and match.group(2)) or s ... >>> f('bananabananaban') 'banana' >>> f('bananabanana') 'banana' >>> f('banana') 'banana' >>>
vananabuКакой критерий для выделения? По идее, тут без регекспов надо. Просто брать всё, не равное первому символу.
bananabanana - слово banana
bananabananaban - слово banana
banana - слово banana
bananab - banana
bananabana - banana
bananabanana bananabanan bananabananaban banana bananab
bananabas
abc
abcabcabc
abcab либо abca либо abcabcabcab
abc
vananabuА bananaban что даёт?
но в строке:ключевым словом будет bananabas, т.к. после второго b идут символы не совпадающие с символами после первого b началом строкиbananabas
Проще убить ся об стену…не стоит.
что будет если:Будет abc.
abcabcabcabc ?
А икс ты угадал, в лучшем случае получишь abcabc (если условием сделать максимально длинные вхождения)Нужно получить минимальное по длинне слово, из которого можно соорудить строку.
Или ab - если условие - количествоСтрока состоит только из одного слова.
Или набор из аб, bc, ca если на условия пофиг.
Строка aaaaaaaaaa какой результат даёт?Слово a.
А bananaban что даёт?Слово banana, т.к. это минимальная последовательность символов, из которых можно получить bananaban.