Уведомления

Группа в Telegram: @pythonsu

#1 Май 24, 2016 12:42:44

@pollo84
Зарегистрирован: 2012-08-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение - альтернативные шаблоны

Добрый день!

Помогите написать регулярное выражение. Есть строки:
s1 = “Бампер для Toyota Corolla”
s2 = “Renault Duster (2012–) Панель передняя радиатора”

Хочу написать регулярное выражение которое:
1) извлекает если есть слово “для” - Бампер
2) а если нет слова “для” - строку после строки вида (2012–XXYY). в данном случае Панель передняя радиатора

По отдельности проблемы нет написать
re_detail = re.compile(“(?P<detail>.*)\s*для\s*”)
m = re_detail.search(s1)
if m:
print m.group('detail')
ну и аналогично со вторым случаем.

А вот как это записать в одном выражении - не знаю …

Спасибо !

Офлайн

#2 Май 24, 2016 13:08:43

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

Регулярное выражение - альтернативные шаблоны

@pollo84
Хочу написать регулярное выражение которое:
Напиши два регулярных выражения и выбирай нужное по условию наличия слова “для”.



Отредактировано py.user.next (Май 24, 2016 13:09:04)

Офлайн

#3 Май 24, 2016 13:23:54

@pollo84
Зарегистрирован: 2012-08-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение - альтернативные шаблоны

Ну это да - можно сделать… просто вроде как в регулярках можно задать логическое условие и в зависимости от его выполнения применить к строке разные шаблоны ..

Офлайн

#4 Май 24, 2016 15:21:18

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

Регулярное выражение - альтернативные шаблоны

@pollo84
просто вроде как в регулярках можно задать логическое условие
У тебя две абсолютно разных строки, с которыми нужно сделать две абсолютно разные вещи.

>>> import re
>>> 
>>> pat = r'(\S+(?= для)|(?<=\(\d{4}-\d{4}\) ).*)'
>>> 
>>> s1 = 'Бампер для Toyota Corolla'
>>> s2 = 'Renault Duster (2012-1234) Панель передняя радиатора'
>>> 
>>> re.search(pat, s1).group(0)
'Бампер'
>>> re.search(pat, s2).group(0)
'Панель передняя радиатора'
>>>

Но это неправильно. Любое новое условие, возникшее из текста, сломает всё регулярное выражение и его надо будет делать заново.



Офлайн

#5 Май 26, 2016 14:25:12

@pollo84
Зарегистрирован: 2012-08-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение - альтернативные шаблоны

Спасибо - то что надо!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version