在python1.5.2中从字符串中提取数字

2024-06-16 10:00:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在使用Telit模块(gt864py),并尝试从使用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+中使用此代码,我得到以下错误:

名称错误:isdigit

所以我假设Python1.5.2不支持isdigit,对吗?如果是这样的话,有人知道提取#ADC:xxx后面的数字的其他方法吗?你知道吗


Tags: 模块字符串代码命令示例错误数字at
2条回答

如果字符串总是正好是"#ADC: ",那么简单的字符串切片也应该起作用:

if pump[:6] == '#ADC: ':
    pumpb = int(pump[6:])

Python 1.5.2p2 documentation在线提供。实际上,在str或模块^{}中都没有isdigit。你知道吗


即使在Python 1.5中,str也是一个支持in操作的序列,因此您可以执行以下操作:

def isdigit(c):
    return c in '0123456789'

pumpb = int(filter(isdigit, pump))

为了更彻底的解析,我将使用正则表达式,而使用模块^{};代码

import re
match = re.search('#ADC:\s*(\d+)', pump)
if match:
    number = match.group(1)

这将匹配#ADC:,后跟任意数量的空格,后跟一个或多个数字[0-9];这些数字被捕获在组1中,如果找到匹配,则该组的值将存储到number。你知道吗

相关问题 更多 >