Я знаю, что могу использовать регулярные выражения для фильтрации текста в 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
Да, я бы сказал, что регулярные выражения являются идеальным инструментом для этого:
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))
map
выглядит здесь по порядку: map(int, re.findall("\d+", s)
. Но +1, только то, что я бы сделал :)
Просто отфильтруйте не цифры в выражении генератора:
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]