在python中过滤文本中的数值

时间:2012-12-14 21:17:00

标签: python regex

我知道我可以使用正则表达式在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

2 个答案:

答案 0 :(得分: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 :(得分:0)

只需过滤掉generator-expression中的非数字:

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]