Форум сайта python.su
Windows, Python 2.7
Код:
# -*- coding: windows-1251 -*-
import re
str = "Ипотека Тольятти. Автовазбанк."
regex = re.compile("Ипотека\s+(?P<city>[-А-яё\s]+)\.\s+(?P<bank>[-А-яё\s]+)\.", re.I)
match = regex.search(str)
print "Один элемент:", match.group("city")
print "Несколько элементов:", match.group("city", "bank")
print "Все элементы:", match.groups()
Один элемент: Тольятти
Несколько элементов: ('\xd2\xee\xeb\xfc\xff\xf2\xf2\xe8', '\xc0\xe2\xf2\xee\xe2\xe0\xe7\xe1\xe0\xed\xea')
Все элементы: ('\xd2\xee\xeb\xfc\xff\xf2\xf2\xe8', '\xc0\xe2\xf2\xee\xe2\xe0\xe7\xe1\xe0\xed\xea')
Отредактировано (Янв. 26, 2012 05:14:07)
Офлайн
1. Это явно не юникод, а windows-1251. При печати производится преобразование объекта в строку. Для tuple это аналогично вызову repr.
2. Прочитай про re.LOCALE и re.UNICODE
И еще - не называй переменную str, т.к. это скрывает встроенный тип.
Офлайн
1. Справедливо…
2. Читал, сделал - не вышло, направление понял, спасибо.
Все переменные для примера, для лучшего понимания примера … Вообще я всегда делаю рефакторинг после написания кода.
Офлайн
# -*- coding: windows-1251 -*-
import re
line = u"Ипотека Тольятти. Автовазбанк."
regex = re.compile( ur"Ипотека\s+(?P<city>[\w\s]+)\.\s+(?P<bank>[\w\s]+)\.", re.I | re.UNICODE )
match = regex.search(line)
print u"Один элемент:", match.group("city")
print u"Несколько элементов:", u", ".join( match.group("city", "bank") )
print u"Все элементы:", u", ".join( match.groups() )
Офлайн
agalenДумаю ставить это везде - лишнее, достаточно добавить re.U в регулярное выражение, чтобы \w соответствовало нашим символам.
u"Ипоте…
Офлайн