Фильтрация текста в python для числовых значений

1

Я знаю, что могу использовать регулярные выражения для фильтрации текста в python для цифр, но это лучший способ?

Скажем, у меня есть список строк:

a="gamma function: 78"
b="factorial value: 120"
c="random number: 33"

есть ли хорошая функция, которая будет делать следующее?

for string in [a,b,c]:
    return numbers(string)
78
120
33
  • 0
    лучший здесь означает 1) самый простой и 2) самый быстрый (в вычислительном отношении), в этом порядке.
  • 0
    Всегда ли есть только одно число на строку? Это всегда целое число?
Показать ещё 4 комментария
Теги:

2 ответа

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

Да, я бы сказал, что регулярные выражения являются идеальным инструментом для этого:

def numbers(s):
    return int(re.search(r"\d+", s).group(0))

Для строк с несколькими номерами:

def numbers(s):
    return [int(match) for match in re.findall(r"\d+", s)]

или даже

def numbers(s):
    return (int(match) for match in re.finditer(r"\d+", s))
  • 1
    map выглядит здесь по порядку: map(int, re.findall("\d+", s) . Но +1, только то, что я бы сделал :)
0

Просто отфильтруйте не цифры в выражении генератора:

a="gamma function: 78"
b="factorial value: 120"
c="random number: 33"

numbers = []
for string in [a,b,c,]:
    numbers.append( int("".join(char for char in string if char.isdigit())))

Вставив это на консоль, я получил:

>>> numbers
[78, 120, 33]
  • 0
    Это хорошо для одного числа в каждой строке, даже если цифры разбиты другими символами. Пожалуйста, уточните свой вопрос, есть ли случаи, когда в каждой строке может быть более одного числа - о, я видел, что да, в ваших комментариях сейчас.

Ещё вопросы

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