Python Расщепление строки по номеру и пробелу

Хай, не могли бы вы мне помочь? У меня есть много строк, которые содержат адреса, и мне нужно разделить их, чтобы получить название улицы, номер дома и страну в массиве.

что-то вроде этого:

streetA 15, New York
street number 2 35, California
streetB 36B, Texas

в:

['streetA','15','New York']
['street number 2','35','California']
['streetB','36B','Texas']

Спасибо.

4 ответа

Решение

Вам не нужно использовать re.compile():

import re

def splitup(string):
    match = re.search(" \\d[^ ]*, ", string)
    if match is None:
        raise ValueError("Not a valid string: %r" % string)
    street = string[:match.start()]
    number = string[match.start(): match.end()].strip(", ")
    state = string[match.end():]
    return [street, number, state]

Для ваших примеров он печатает:

['streetA', '15', 'New York']
['street number 2', '35', 'California']
['streetB', '36B', 'Texas']

Просто используйте .split(',') чтобы получить страну (последний элемент), затем найдите последний пробел в первом элементе:

>>> l = 'street number 2 35, California'.split(',')
>>> index = l[0].rfind(' ')
>>> l = [l[0][:index]] + [l[0][index+1:]]+ [l[1].strip()]
>>> l
['street number 2', '35', 'California']

Решение @Brendan Abel хорошо, хотя оно возвращает кортеж, а не список.

Вы можете преобразовать его в список, используя list() функция, и это будет соответствовать вашему выводу:

import re

regex = re.compile(r'^(.+) (\d+\w*), (.+)$')

m = regex.match('streetA 15, New York')
result=list(m.groups())
print result
# ['streetA', '15', 'New York']

Вы можете использовать регулярные выражения.

import re

regex = re.compile(r'^(.+) (\d+\w*), (.+)$')

m = regex.match('streetA 15, New York')
print m.groups()
# ('streetA', '15', 'New York')

m = regex.match('street number 2 35, California')
print m.groups()
# ('street number 2', '35', 'California')

Вот пример для regex101.

Другие вопросы по тегам