Найти отдельные целые числа в строке в Python - PullRequest
1 голос
/ 07 августа 2020

Я создаю функцию, которая берет улицу плюс номер дома и, возможно, прибавление, и возвращает номер дома. Я мог бы просто извлечь целые числа, но проблема в том, что в самом названии улицы может быть целое число. Например: my_string = 'Hendrik 4e laan 18 bis'

В этом случае я хотел бы вернуть: street_name = 'Hendrik 4e laan', street_number = 18, street_number_addition = 'bis'

Я не могу просто разбить строку на пробелы и взять последнее целое число ([x for x in my_string.split() if x.isdigit()][-1]), потому что добавление номера улицы может быть присоединено к номеру улицы (например, 18bis или 18b).

Следовательно, как мне получить список [4, 18], чтобы я мог просто взять последний элемент?

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Если вы знаете, что вам нужно только последнее вхождение, тогда другой вариант вместо поиска всех из них (что вы могли бы сделать с помощью findall - см. Ответ Леника) - это поиск последовательности цифр, после которых есть больше никаких цифр перед концом строки:

import re
my_string = 'Hendrik 4e laan 18 bis'
match = re.search(r'(\d+)\D*$', my_string)
if match:
    number = int(match.group(1))  # gives here: number = 18
else:
    print("no digits found")

Объяснение регулярного выражения:

  • (\d+) одна или несколько цифр (с группирующими круглыми скобками, чтобы мы могли использовать .group(1) для их извлечения)
  • \D* - ноль или более символов, не являющихся цифрами
  • $ - конец строки
0 голосов
/ 07 августа 2020

У меня работает:

>>> import re
>>> my_string = 'Hendrik 4e laan 18 bis'
>>> re.findall( r'(\d+)', my_string )
['4', '18']
>>> 
...