Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 10, 2015 15:58:33

vananabu
Зарегистрирован: 2015-07-25
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Помощь с регуляркой

Помогите с регуляркой. Строка состоит из слова, которое несколько раз подряд повторилось. Необходимо выделить это слово. Например:
bananabanana - слово banana
bananabananaban - слово banana
banana - слово banana
Схематически как я думаю это так -

"^(первая группа) ((вторая группа) \1)* $"
. Подскажите, на что обратить внимание.

Офлайн

#2 Сен. 10, 2015 17:28:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Помощь с регуляркой

>>> 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'
>>>



Офлайн

#3 Сен. 10, 2015 17:56:52

vananabu
Зарегистрирован: 2015-07-25
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Помощь с регуляркой

Такой вариант уже пробовал, не всё учитывается. Что-то, наподобие этого уже не обрабатываются:
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)

Офлайн

#4 Сен. 10, 2015 18:07:49

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Помощь с регуляркой

vananabu
bananabanana - слово banana
bananabananaban - слово banana
banana - слово banana

bananab - banana
bananabana - banana
Какой критерий для выделения? По идее, тут без регекспов надо. Просто брать всё, не равное первому символу.



Офлайн

#5 Сен. 10, 2015 22:41:52

vananabu
Зарегистрирован: 2015-07-25
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Помощь с регуляркой

Есть какое либо ключевое слово, которое повторяется подряд не целое количество раз. Его и надо получить.
Например, все тот же пример:
ключевое слово banana
его нужно получить из строк типа:

bananabanana
bananabanan
bananabananaban
banana
bananab
но в строке:
bananabas
ключевым словом будет bananabas, т.к. после второго b идут символы не совпадающие с символами после первого b началом строки

Отредактировано vananabu (Сен. 10, 2015 22:48:30)

Офлайн

#6 Сен. 10, 2015 22:51:02

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Помощь с регуляркой

ИМХО надо четче определять условия…
например:
bananabananaban
ban встречается аж три раза, чем не повторяющееся слово?

ЗЫ. А an аж пять раз

Отредактировано Iskatel (Сен. 10, 2015 23:12:25)

Офлайн

#7 Сен. 10, 2015 23:50:29

vananabu
Зарегистрирован: 2015-07-25
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Помощь с регуляркой

Ок. четче так четче)) Дана строка, которая состоит из одного слова, которое повторяется по кругу. Например, слово

abc
. Строка может состоять из целого числа повторений этого слова
abcabcabc
, так и не целого
abcab либо abca либо abcabcabcab
, либо строка состоит из одного повторения слова, т.е. и является этим словом
abc
не зная это слово, а имея на руках только строку, нужно получить слово, из повторения которого и состоит эта строка. В данном примере из строк нужно получить abc

Отредактировано vananabu (Сен. 10, 2015 23:54:55)

Офлайн

#8 Сен. 11, 2015 00:00:54

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Помощь с регуляркой

Проще убить ся об стену…

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

abcabcabcabc ?

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

ЗЫ. я намекал об этом в предыдущем посте.
ЗЫЫ. ХЗ, что у тя за задача, но она нерешаема без словаря возможных слов.

Офлайн

#9 Сен. 11, 2015 02:41:24

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Помощь с регуляркой

Строка aaaaaaaaaa какой результат даёт?

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

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



Отредактировано py.user.next (Сен. 11, 2015 02:46:00)

Офлайн

#10 Сен. 11, 2015 10:24:55

vananabu
Зарегистрирован: 2015-07-25
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Помощь с регуляркой

Проще убить ся об стену…
не стоит.
что будет если:

abcabcabcabc ?
Будет abc.
А икс ты угадал, в лучшем случае получишь abcabc (если условием сделать максимально длинные вхождения)
Нужно получить минимальное по длинне слово, из которого можно соорудить строку.
Или ab - если условие - количество
Или набор из аб, bc, ca если на условия пофиг.
Строка состоит только из одного слова.
Строка aaaaaaaaaa какой результат даёт?
Слово a.
А bananaban что даёт?
Слово banana, т.к. это минимальная последовательность символов, из которых можно получить bananaban.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version