Форум сайта python.su
0
Есть большой список адресов вида :
Ким 22/32
40 лет Победы 19/111
60 лет СССР 10/16
40 лет Победы 11а/115
Школьная 26а
Требуется разделить улицу , дом , букву и квартиру ( ).
Посоветуйте как или чем это можно сделать ? подойдут ли регулярные выражение или можно обойтись без них ?
Офлайн
173
Проще без регулярок разбить:
In [1]: s = 'asdf asdf 22/32' In [2]: s.rpartition(' ') Out[2]: ('asdf asdf', ' ', '22/32') In [3]: name, _, number = s.rpartition(' ')
In [4]: '19/111'.partition('/') Out[4]: ('19', '/', '111') In [5]: '19a'.partition('/') Out[5]: ('19a', '', '')
Офлайн
0
reclosedev
Спасибо , да без регулярок этот пример подходит но нужно отделить букву от подъезда а этой буквы может и не быть, вопрос как определить что последний символ это буква а не цифра ?
Офлайн
857
>>> import re >>> >>> s = """ ... Ким 22/32 ... 40 лет Победы 19/111 ... 60 лет СССР 10/16 ... 40 лет Победы 11а/115 ... Школьная 26а ... """ >>> >>> lst = re.findall(r'^(.+)\s+(\d+)([^\d/\n]*)/?(\d+)?$', s, re.M) >>> print(lst) [('Ким', '22', '', '32'), ('40 лет Победы', '19', '', '111'), ('60 лет СССР', '10', '', '16'), ('40 лет Победы', '11', 'а', '115'), ('Школьная', '26', 'а', '')] >>>
>>> import re >>> >>> s = """ ... Ким 22/32 ... 40 лет Победы 19/111 ... 60 лет СССР 10/16 ... 40 лет Победы 11а/115 ... Школьная 26а ... """ >>> >>> pat = r''' ... ^ ... (.+) # street ... \s+ # street <space> house ... (\d+) # house number ... ([^\d/\n]*) # optional house letter ... /? # optional flat sign ... (\d+)? # optional flat number ... $ ... ''' >>> >>> lst = re.findall(pat, s, re.X | re.M) >>> print(lst) [('Ким', '22', '', '32'), ('40 лет Победы', '19', '', '111'), ('60 лет СССР', '10', '', '16'), ('40 лет Победы', '11', 'а', '115'), ('Школьная', '26', 'а', '')] >>>
Отредактировано py.user.next (Май 30, 2013 06:08:10)
Офлайн
0
py.user.next
Спасибо за развернутый вопрос все работает :)
Но можно еще пару вопросов для общего понимания:
Знаки вопроса это получается то чего может и не быть в поиске ?
И подскажи каким редактором для регулярных выражений ты пользуешся, в питоне твой пример работает а вот например в этим редакторае нет http://www.rubular.com/
Офлайн
857
это глюки того редактора (требует экранировать слеши)
^(.+)\s+(\d+)([^\d\/\n]*)\/?(\d+)?$
40 лет Победы 11а/115
Jeck290никаким
И подскажи каким редактором для регулярных выражений ты пользуешся
Офлайн
0
cспасибо
Офлайн