如何在python中使用re.findall

时间:2016-11-22 05:15:45

标签: python regex tuples variable-assignment multiple-return-values

这是我的计划:

import re
string = "I have 56 apples, Tom has 34 apples, Mary has 222 apples"

apple = re.findall(r'\d{1,100}', string)
print (apple)

结果是:

['56', '34', '222']

我想命名上面的三个数字,以便我可以做一些计算。我还想说出第一个结果a,第二个b,第三个c。然后计算a+ba+c,就像那样。谁能告诉我怎么做。

如果re.findall无法解决我的问题,是否还有其他方法可以实现这一目标?

2 个答案:

答案 0 :(得分:2)

通过简单的循环检查,这是一种更简单的方法。

string = "I have 56 apples, Tom has 34 apples, Mary has 222 apples"
x = [int(num) for num in string.split() if num.isdigit()]

>>> x
[56, 34, 222]

这将拆分字符串并检查它是否为数字,并将其返回列表。如果您希望这些数字用于字符串(我无法理解为什么,如果它是一个数字,请将其设为数字​​),然后删除int()投射。

您的问题的问题在于,如果您想将这些已解析的数字分配给变量,您必须手动执行此操作,这很糟糕。如果你最终返回了一个动态数字的数字,这将非常繁琐且可能不可靠。你可能想在这里重新考虑逻辑。

答案 1 :(得分:2)

如果需要,您可以在LHS上使用 元组分配

a,b,c = re.findall(r'\d{1,100}', string)

这相当于写(a,b,c) = ...;你不再需要在一个元组周围加上括号,如果它是在一个赋值的LHS上。

这是糟糕的编码风格,因为@SterlingArcher说,因为除非你得到三个项目,或者如果你的字符串坏了,或者正则表达式失败,你就会收到错误。

一种策略是使用尾随_作为无关变量来吸收任何额外的项目:a,b,c,_ = ...但如果你的字符串或正则表达式至少没有给出,这仍然会破坏三个项目。