Найти - Пользователи
Полная версия: Помощь с регуляркой
Начало » Python для новичков » Помощь с регуляркой
1 2
vananabu
Помогите с регуляркой. Строка состоит из слова, которое несколько раз подряд повторилось. Необходимо выделить это слово. Например:
bananabanana - слово banana
bananabananaban - слово banana
banana - слово banana
Схематически как я думаю это так -
"^(первая группа) ((вторая группа) \1)* $"
. Подскажите, на что обратить внимание.
py.user.next
>>> 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
Такой вариант уже пробовал, не всё учитывается. Что-то, наподобие этого уже не обрабатываются:
bananab - banana
bananabana - banana
Я думаю, слово нужно искать не целиком. А из двух кусков, а потом склеивать. например:
bananab - (b , anana, b) group(1)+group(2)
bananabanan - (banan, a, banan) group(1)+group(2)
py.user.next
vananabu
bananabanana - слово banana
bananabananaban - слово banana
banana - слово banana

bananab - banana
bananabana - banana
Какой критерий для выделения? По идее, тут без регекспов надо. Просто брать всё, не равное первому символу.
vananabu
Есть какое либо ключевое слово, которое повторяется подряд не целое количество раз. Его и надо получить.
Например, все тот же пример:
ключевое слово banana
его нужно получить из строк типа:
bananabanana
bananabanan
bananabananaban
banana
bananab
но в строке:
bananabas
ключевым словом будет bananabas, т.к. после второго b идут символы не совпадающие с символами после первого b началом строки
Iskatel
ИМХО надо четче определять условия…
например:
bananabananaban
ban встречается аж три раза, чем не повторяющееся слово?

ЗЫ. А an аж пять раз
vananabu
Ок. четче так четче)) Дана строка, которая состоит из одного слова, которое повторяется по кругу. Например, слово
abc
. Строка может состоять из целого числа повторений этого слова
abcabcabc
, так и не целого
abcab либо abca либо abcabcabcab
, либо строка состоит из одного повторения слова, т.е. и является этим словом
abc
не зная это слово, а имея на руках только строку, нужно получить слово, из повторения которого и состоит эта строка. В данном примере из строк нужно получить abc
Iskatel
Проще убить ся об стену…

что будет если:

abcabcabcabc ?

А икс ты угадал, в лучшем случае получишь abcabc (если условием сделать максимально длинные вхождения)
Или ab - если условие - количество
Или набор из аб, bc, ca если на условия пофиг.

ЗЫ. я намекал об этом в предыдущем посте.
ЗЫЫ. ХЗ, что у тя за задача, но она нерешаема без словаря возможных слов.
py.user.next
Строка aaaaaaaaaa какой результат даёт?

vananabu
но в строке:
bananabas
ключевым словом будет bananabas, т.к. после второго b идут символы не совпадающие с символами после первого b началом строки
А bananaban что даёт?

Пока чёткого алгоритма нет, код писать смысла нет, иначе получится десять кодов и все неправильные.
vananabu
Проще убить ся об стену…
не стоит.
что будет если:

abcabcabcabc ?
Будет abc.
А икс ты угадал, в лучшем случае получишь abcabc (если условием сделать максимально длинные вхождения)
Нужно получить минимальное по длинне слово, из которого можно соорудить строку.
Или ab - если условие - количество
Или набор из аб, bc, ca если на условия пофиг.
Строка состоит только из одного слова.
Строка aaaaaaaaaa какой результат даёт?
Слово a.
А bananaban что даёт?
Слово banana, т.к. это минимальная последовательность символов, из которых можно получить bananaban.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB