Форум сайта python.su
0
Помогите с регуляркой. Строка состоит из слова, которое несколько раз подряд повторилось. Необходимо выделить это слово. Например:
bananabanana - слово banana
bananabananaban - слово banana
banana - слово banana
Схематически как я думаю это так -
"^(первая группа) ((вторая группа) \1)* $"
Офлайн
857
>>> 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' >>>
Офлайн
0
Такой вариант уже пробовал, не всё учитывается. Что-то, наподобие этого уже не обрабатываются:
bananab - banana
bananabana - banana
Я думаю, слово нужно искать не целиком. А из двух кусков, а потом склеивать. например:
bananab - (b , anana, b) group(1)+group(2)
bananabanan - (banan, a, banan) group(1)+group(2)
Отредактировано vananabu (Сен. 10, 2015 18:04:11)
Офлайн
857
vananabuКакой критерий для выделения? По идее, тут без регекспов надо. Просто брать всё, не равное первому символу.
bananabanana - слово banana
bananabananaban - слово banana
banana - слово banana
bananab - banana
bananabana - banana
Офлайн
0
Есть какое либо ключевое слово, которое повторяется подряд не целое количество раз. Его и надо получить.
Например, все тот же пример:
ключевое слово banana
его нужно получить из строк типа:
bananabanana bananabanan bananabananaban banana bananab
bananabas
Отредактировано vananabu (Сен. 10, 2015 22:48:30)
Офлайн
3
ИМХО надо четче определять условия…
например:
bananabananaban
ban встречается аж три раза, чем не повторяющееся слово?
ЗЫ. А an аж пять раз 
Отредактировано Iskatel (Сен. 10, 2015 23:12:25)
Офлайн
0
Ок. четче так четче)) Дана строка, которая состоит из одного слова, которое повторяется по кругу. Например, слово
abc
abcabcabc
abcab либо abca либо abcabcabcab
abc
Отредактировано vananabu (Сен. 10, 2015 23:54:55)
Офлайн
3
Проще убить ся об стену…
что будет если:
abcabcabcabc ?
А икс ты угадал, в лучшем случае получишь abcabc (если условием сделать максимально длинные вхождения)
Или ab - если условие - количество
Или набор из аб, bc, ca если на условия пофиг.
ЗЫ. я намекал об этом в предыдущем посте.
ЗЫЫ. ХЗ, что у тя за задача, но она нерешаема без словаря возможных слов.
Офлайн
857
Строка aaaaaaaaaa какой результат даёт?
vananabuА bananaban что даёт?
но в строке:ключевым словом будет bananabas, т.к. после второго b идут символы не совпадающие с символами после первого b началом строкиbananabas
Отредактировано py.user.next (Сен. 11, 2015 02:46:00)
Офлайн
0
Проще убить ся об стену…не стоит.
что будет если:Будет abc.
abcabcabcabc ?
А икс ты угадал, в лучшем случае получишь abcabc (если условием сделать максимально длинные вхождения)Нужно получить минимальное по длинне слово, из которого можно соорудить строку.
Или ab - если условие - количествоСтрока состоит только из одного слова.
Или набор из аб, bc, ca если на условия пофиг.
Строка aaaaaaaaaa какой результат даёт?Слово a.
А bananaban что даёт?Слово banana, т.к. это минимальная последовательность символов, из которых можно получить bananaban.
Офлайн