簡體   English   中英

如何在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+ba+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]

這將拆分字符串並檢查它是否為數字,然后將其返回到列表。 如果您希望這些數字使用字符串表示(我不明白為什么,如果是數字,則讓它成為數字),然后刪除int()強制轉換。

問題的問題在於,如果要將這些解析后的數字分配給變量,則必須手動進行操作,這很不好。 如果最終返回的是動態數量的數字,那么這將非常繁瑣且可能不可靠。 您可能要在這里重新考慮邏輯。

如果需要,可以在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

這段代碼可能效率不高,但易於理解,可以完成您需要完成的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM