Найти - Пользователи
Полная версия: Разделение улицы дома и квартиры регулярным выражением
Начало » Python для новичков » Разделение улицы дома и квартиры регулярным выражением
1
Jeck290
Есть большой список адресов вида :

Ким 22/32
40 лет Победы 19/111
60 лет СССР 10/16
40 лет Победы 11а/115
Школьная 26а

Требуется разделить улицу , дом , букву и квартиру ( ).
Посоветуйте как или чем это можно сделать ? подойдут ли регулярные выражение или можно обойтись без них ?
reclosedev
Проще без регулярок разбить:
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', '', '')
Jeck290
reclosedev
Спасибо , да без регулярок этот пример подходит но нужно отделить букву от подъезда а этой буквы может и не быть, вопрос как определить что последний символ это буква а не цифра ?
py.user.next
>>> 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', 'а', '')]
>>>
Jeck290
py.user.next
Спасибо за развернутый вопрос все работает :)
Но можно еще пару вопросов для общего понимания:
Знаки вопроса это получается то чего может и не быть в поиске ?
И подскажи каким редактором для регулярных выражений ты пользуешся, в питоне твой пример работает а вот например в этим редакторае нет http://www.rubular.com/
py.user.next
это глюки того редактора (требует экранировать слеши)
^(.+)\s+(\d+)([^\d\/\n]*)\/?(\d+)?$
40 лет Победы 11а/115

Jeck290
И подскажи каким редактором для регулярных выражений ты пользуешся
никаким
есть документация - python.org. re
и воображение, которое развивается с помощью блок-схем
Jeck290
cспасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB