Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2023, 09:34   #1
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию Поиск повторяющихся друг за другом слов с использованием регулярных выражений

здравствуйте, код:
Код:
import re
 
s = '''hello world
hello  hello hello world
worldhellohellohello'''
 
for i in re.finditer(r'(\w{2,})(\s*\1)+', s):
    print(i[0])
вопрос именно про питон 2.7 ошибка на последней строке:
'_sre.SRE_Match' object has no attribute '__getitem__'
=
Объект '_sre.SRE_Match' не имеет атрибута '__getitem__'
не в курсе как это лечится?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 30.01.2023, 12:35   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

У Match'а нет [] (который __getitem__) в 2. Используйте груп.
p51x на форуме Ответить с цитированием
Старый 30.01.2023, 13:18   #3
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

попробовал
Код:
print(i.group(0))
работает, но лучше спросить - так?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 30.01.2023, 13:42   #4
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

какое-то не кашерное решение
если так
Код:
s = "/*метр* 0000 1-99+кило*/"
ответ 0000 - но оно НЕ повторяется, кто подскажет как правильно с учётом, что нужно для питона 2.7? спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 30.01.2023, 17:54   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

При регулярке "(\w{2,})(\s*\1)+" получается два "слова" 00 и 00 (в питоне не запускал, а посмотрел на https://regex101.com/). Можно попробовать "(\w{2,})(\s+\1)+", но тогда не будет находиться hellohellohello. Или так "(\w{3,})(\s*\1)+", тогда на 0000 не будет срабатывать. Нужно точнее сформулировать, что считать словом, сколько пробельных символов могут разделять слова.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 30.01.2023, 20:46   #6
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

в моём случае слово это набор символов между пробелами
началом слова может быть не пробел, а "[" или "*"
окончанием слова может быть не пробел, а "]" или "*" или ";"

Последний раз редактировалось Ципихович Эндрю; 30.01.2023 в 20:53.
Ципихович Эндрю вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синтаксис регулярных выражений в C++ Rorian Visual C++ 0 03.02.2015 05:02
Использование регулярных выражений Mixim Общие вопросы по программированию, компьютерный форум 3 03.05.2013 12:12
Поиск повторяющихся слов и их удаление!!!!!!!! в делфи Ejevila Помощь студентам 2 20.12.2010 21:55