← Все вопросы

Как вытащить из строки все числа? re.findall не вытаскивает многозначные

Задан 2 месяца назад769 просмотров3 ответа
14

Пытаюсь достать числа из 'дом 12, кв 345'. Пробовал перебирать символы через isdigit(), но число разваливается на отдельные цифры. Как получить именно ['12', '345']?

3 ответа

24
✓ Принятый ответ — помог автору

Регулярка \d+ — одна или несколько цифр подряд:

import re
re.findall(r'\d+', 'дом 12, кв 345')  # ['12', '345']

Если нужны сразу int: [int(x) for x in re.findall(r'\d+', s)]. А для чисел с минусом и точкой — r'-?\d+\.?\d*'.

Арсений Данилов `+` — вот чего не хватало, спасибо · 2 месяца назад
8

Твоя ошибка в том, что isdigit() смотрит на один символ. re.findall(r'\d+', s) группирует цифры в числа.

-2

Перебирай символы и склеивай в буфер, пока идут цифры. (это работает, но регуляркой в разы короче)

Nick Dolbnya зачем велосипед, есть re.findall · 2 месяца назад

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект