在python中过滤文本以获取数值

在python中过滤文本以获取数值,python,regex,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 是的,我认为正则表达式是实现这一点的理想工具: def numbers(s): ret

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

是的,我认为正则表达式是实现这一点的理想工具:

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))

只需过滤掉生成器表达式中的非数字:

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]

只需过滤掉生成器表达式中的非数字:

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]

这里的“最佳”是指1)最简单,2)最快(计算),按顺序排列。每个字符串总是只有一个数字吗?它总是整数吗?理想情况下,两者都是。我会接受一个假设的答案。它总是在字符串的末尾,下面是“?”这里最好的意思是1)最简单,2)最快(计算),按顺序排列。每个字符串总是只有一个数字吗?它总是整数吗?理想情况下,两者都是。我会接受一个假设的答案。它总是在字符串的末尾,下面是“?”。这对于每个字符串中的一个数字很好,即使数字被其他字符隔开。请澄清您的问题,如果在某些情况下,每个字符串中可能有一个以上的数字-哦,我在您的评论中看到了是的。这对每个字符串中的一个数字很好,即使数字被其他字符所替代。如果在某些情况下,每个字符串中可能有多个数字,请澄清您的问题-哦,我现在在您的评论中看到了是的。
map
在这里似乎是有序的:
map(int,re.findall(“\d+”,s)
。但是+1,我要做的是:)A
map
在这里似乎是有序的:
map(int,re.findall(“\d+”,s)
。但是+1,正是我要做的:)