Как использовать пробелы в качестве разделителей для получения подстроки в строке?

1

У меня есть список уличных адресов, некоторые из которых имеют поля. Я хочу удалить все, что не является полем po из строки, если оно содержит поле po. Например, если есть список ['123 any drive', '234 any lane po box 3213', 'po box 190 441 bettername street'], это должно возвращать ['123 любой диск', 'поле box 3213', ' 'po box 190']. Все, что я до сих пор

def listofaddr(lst)):
    boxes = ('po box ', 'p o box ')
    finstring = []
    for i in lst:
        if boxes in i:
            i = 'po box ' + 
        finstring.append(i)

То, что я думаю, что я могу сделать, это использовать пробел после "окна" в качестве разделителя, захватить следующую подстроку чисел после пробела и использовать следующее пространство в качестве разделителя для завершения строки, но я не могу придумать, как это сделать этот.

Теги:
string
python-3.x

3 ответа

2
Лучший ответ

Это должно работать:

a=['123 whatever drive', '234 anywhere lane po box 3213', 'po box 190 441 bettername street']
["po box "+e.split("po box ")[1].split(" ")[0] if "po box" in e else e for e in a]

Выход:

['123 whatever drive', 'po box 3213', 'po box 190']
  • 0
    Что в мире соответствует e и a ?
  • 0
    a это список ввода. e является переменной цикла
1

Вы можете использовать регулярное выражение, которое легко проверить здесь: https://pythex.org/

import re
firstList = ['123 whatever drive', '234 anywhere lane po box 3213', 'po box 190 441 bettername street']
outputList = [re.search('[0-9]+', x)[0] if 'po box' in x else x for x in firstList]

Вывод:

['123 whatever drive', 'po box 3213', 'po box 190']
  • 0
    ['123 whatever drive', 'po box 3213', 'po box 190'] не совпадает с ['123 whatever drive', 'po box 3213', 'po box 190 441']
  • 0
    Это не предполагаемый результат в соответствии с вопросом ОП.
Показать ещё 2 комментария
0

Использование списка:

addrs = ['123 whatever drive', '234 anywhere lane po box 3213', 'po box 190 441 bettername street']
boxes = [(a[a.index('po box'):] if ('po box' in a) else a) for a in addrs]

Я использую простую строковую строчку здесь: если строка 'po box' существует в любом адресе a, отрежьте часть строки до этой точки. В противном случае просто верните адрес a и сделайте это для всех адресов a в addrs.

Если вы хотите получить более конкретную информацию, вы можете изучить использование регулярных выражений вместо нарезки строк.

  • 1
    Я думаю, что они хотят конкретное число после почтового ящика, а не все после почтового ящика
  • 1
    ['123 whatever drive', 'po box 3213', 'po box 190 441 bettername street'] не является ['123 whatever drive', 'po box 3213', 'po box 190']

Ещё вопросы

Сообщество Overcoder
Наверх
Меню