繁体   English   中英

从python 1.5.2中的字符串中提取数字

[英]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

所以我假设P​​ython 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM