[英]Extracting numbers from a string in python 1.5.2
我正在使用Telit模塊(GT864-py),我正在嘗試從使用AT命令時收到的返回值/字符串中提取數字。
這是我正在使用的代碼示例:
MDM.send('AT#ADC=1,2'+'\r', 5)
pump = MDM.receive(15)
pumpb = int(filter(str.isdigit, pump))
給出了回應
#ADC: 10 (This number can range from ~10-150)
OK
現在,我想在ADC之后過濾數字,但是,我還沒有找到解決方案。
通過在PythonWin 1.5.2+中使用此代碼,我收到以下錯誤:
NameError:isdigit
所以我假設Python 1.5.2不支持isdigit,這是正確的嗎? 如果是這樣,有沒有人知道在#ADC:xxx之后提取數字的其他方法?
Python 1.5.2p2文檔可在線獲取。 實際上, str
或模塊string
都沒有isdigit
。
即使在Python 1.5中, str
也是一個支持in
操作的序列,所以你可以這樣做:
def isdigit(c):
return c in '0123456789'
pumpb = int(filter(isdigit, pump))
為了更深入的分析我會使用一個正則表達式,與模塊re
代替; 代碼
import re
match = re.search('#ADC:\s*(\d+)', pump)
if match:
number = match.group(1)
這將匹配#ADC:
后跟任意數量的空格,后跟1位或更多位[0-9]
; 數字在組1
中捕獲,如果找到匹配,則將其值存儲為number
。
如果字符串總是完全"#ADC: "
,那么簡單的字符串切片也應該有效:
if pump[:6] == '#ADC: ':
pumpb = int(pump[6:])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.