如何在 python 中使用 re.findall
How to use re.findall in python
这是我的程序:
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+b
或 a+c
,诸如此类。谁能告诉我怎么做。
如果re.findall
这里不能解决我的问题,还有其他方法可以实现这个目标吗?
有一个更简单的方法,使用简单的循环检查。
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]
这将拆分字符串并检查它是否为数字,然后 return 将其添加到列表中。如果你希望这些数字在字符串中(我不明白为什么,如果它是一个数字,就让它成为一个数字)然后删除 int()
铸造。
你的问题是,如果你想将这些解析后的数字分配给变量,你必须手动完成,这很糟糕。如果你最终得到一个动态数量的数字 returned,这将非常乏味并且可能不可靠。您可能需要重新考虑此处的逻辑。
如果需要,您可以在 LHS 上使用 元组赋值 :
a,b,c = re.findall(r'\d{1,100}', string)
这相当于写(a,b,c) = ...
;如果元组在赋值的 LHS 上,则不再需要在元组两边加上括号。
正如@SterlingArcher 所说,这是一种糟糕的编码风格,因为除非你恰好得到三个项目,或者如果你的字符串错误,或者正则表达式失败,你会得到一个错误。
一种策略是使用尾随 _
作为无关变量来吸收任何额外的项目:a,b,c,_ = ...
但是如果您的字符串或正则表达式没有给出,这仍然会中断至少三项。
此解决方案可能无法解决 re.findall 的特定问题,但此解决方案可让您进行所需的计算。使用字典:
>>>applesDict = {"My apples": 56, "Tom apples": 34, "Mary apples":222}
现在您可以存储和求解任何计算。
>>>c = applesDict["My apples"]
>>>d = applesDict["Tom apples"]
print c + d
>>> 90
此代码可能效率不高,但易于理解并且可以完成您需要的工作。
这是我的程序:
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+b
或 a+c
,诸如此类。谁能告诉我怎么做。
如果re.findall
这里不能解决我的问题,还有其他方法可以实现这个目标吗?
有一个更简单的方法,使用简单的循环检查。
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]
这将拆分字符串并检查它是否为数字,然后 return 将其添加到列表中。如果你希望这些数字在字符串中(我不明白为什么,如果它是一个数字,就让它成为一个数字)然后删除 int()
铸造。
你的问题是,如果你想将这些解析后的数字分配给变量,你必须手动完成,这很糟糕。如果你最终得到一个动态数量的数字 returned,这将非常乏味并且可能不可靠。您可能需要重新考虑此处的逻辑。
如果需要,您可以在 LHS 上使用 元组赋值 :
a,b,c = re.findall(r'\d{1,100}', string)
这相当于写(a,b,c) = ...
;如果元组在赋值的 LHS 上,则不再需要在元组两边加上括号。
正如@SterlingArcher 所说,这是一种糟糕的编码风格,因为除非你恰好得到三个项目,或者如果你的字符串错误,或者正则表达式失败,你会得到一个错误。
一种策略是使用尾随 _
作为无关变量来吸收任何额外的项目:a,b,c,_ = ...
但是如果您的字符串或正则表达式没有给出,这仍然会中断至少三项。
此解决方案可能无法解决 re.findall 的特定问题,但此解决方案可让您进行所需的计算。使用字典:
>>>applesDict = {"My apples": 56, "Tom apples": 34, "Mary apples":222}
现在您可以存储和求解任何计算。
>>>c = applesDict["My apples"]
>>>d = applesDict["Tom apples"]
print c + d
>>> 90
此代码可能效率不高,但易于理解并且可以完成您需要的工作。