Python RegEx расщепление улицы и номера с адреса - PullRequest
1 голос
/ 14 января 2020

Я хочу разделить улицу и номер.

Это мое текущее решение:

matches = re.match(r'^(?<street>[^,]*?)[,\s]*(?P<number>\d[\w\s\-/]*$)', street_number)

, но в некоторых случаях оно не работает. Если у меня есть такие примеры:

working_examples = [
    'Somestreet 1',
    'Somestreet1',
    'Somestreet1a',
    'Somestreet 1a',
    'Somestreet 1 a'
]

print(matches.groupdict()) печатает для первого элемента working_examples:

{'street': 'Somestreet', 'number': '1'}

Однако в этом случае:

not_working_examples = [
    'Some 1 street',
    'Some 1a street'
]

он печатает

{'street': 'Some ', 'number': '1 street'}

и моя цель -

{'street': 'Some 1 street', 'number': None}

1 Ответ

1 голос
/ 14 января 2020
import re


examples = [
    'Somestreet 1',
    'Somestreet1',
    'Somestreet1a',
    'Somestreet 1a',
    'Somestreet 1 a',
    'Some 1 street',
    'Some 1a street'
]

for s in examples:
    matches = re.match(r'^(?P<street>.+?)[,\s]*(?P<number>\d\s?\w?)$', s)
    if matches:
        print(matches.groups())
    else:
        print s, "doesn't match"

Вывод:

('Somestreet', '1')
('Somestreet', '1')
('Somestreet', '1a')
('Somestreet', '1a')
('Somestreet', '1 a')
Some 1 street doesn't match
Some 1a street doesn't match

Демонстрация и объяснение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...