python从字符串中提取指定内容

您所在的位置:网站首页 python提取字符串指定内容切片 python从字符串中提取指定内容

python从字符串中提取指定内容

2024-07-12 22:52| 来源: 网络整理| 查看: 265

前言

我们在做数据处理的时候,会遇到包含多条格式类似的长字符串,比如说

recv = 'Node1_temperature:26 Node1_humidity:48 Node2_temperature:36 Node2_humidity:48 ' \ 'Node3_temperature:24 Node3_humidity:35 Node4_temperature:54 Node4_humidity:48 ' \ 'Node5_temperature:43 Node5_humidity:48 '

从字符串中我们可以看到有五组格式相同的数据,每一组包含temperature和humidity,所以该怎么把这5组数据提取出来呢?

一.使用pre包中的findall方法

例如:提取Node1_temperature的值,我们可以这样做

Node1_temperature = re.findall(r'Node1_temperature:(.*) Node1_humidity', recv)

该例提出的数据是26。从例子可以看出,findall方法的使用: re.findall(r’ 26前面的部分内容(.*)26后面的部分内容’),也即指明前后,来确定中间夹着的内容,指明相对位置得到绝对位置。

二.findall方法的数据返回类型

findall方法返回的数据类型是一个列表,其列表的内容有且只有一个并且是字符串类型的数据,因此可以定义一个变量来接收,该变量接收后成为列表并且只有一个字符串类型的数据。或者另外定义一个列表,先用索引的方式得到该数据,因为只有一个数据,所以索引最大为0:Node1_temperature[0],最后再使用append方法将数据添加到定义好的列表内。如下:

temp = [] Node1_temperature = re.findall(r'Node1_temperature:(.*) Node1_humidity', recv) temp.append(int(Node1_temperature[0])) 三.说明

格式要求:修改单引号内的内容即可,(.)不用更改。(.)前后的内容根据要提取的数据而定,并且要注意的原字符串中某一数据如26的前后如果包含空格,(.*)前后的内容也要包括空格

re.findall(r'Node1_temperature:(.*) Node1_humidity', recv) 四.Demo import re temp = [] humidity = [] recv = 'Node1_temperature:26 Node1_humidity:48 Node2_temperature:36 Node2_humidity:48 ' \ 'Node3_temperature:24 Node3_humidity:35 Node4_temperature:54 Node4_humidity:48 ' \ 'Node5_temperature:43 Node5_humidity:48 ' Node1_temperature = re.findall(r'Node1_temperature:(.*) Node1_humidity', recv) temp.append(int(Node1_temperature[0])) Node1_humidity = re.findall(r'Node1_humidity:(.*) Node2_temperature', recv) humidity.append(int(Node1_humidity[0])) Node2_temperature = re.findall(r'Node2_temperature:(.*) Node2_humidity', recv) temp.append(int(Node2_temperature[0])) Node2_humidity = re.findall(r'Node2_humidity:(.*) Node3_temperature', recv) humidity.append(int(Node2_humidity[0])) Node3_temperature = re.findall(r'Node3_temperature:(.*) Node3_humidity', recv) temp.append(int(Node3_temperature[0])) Node3_humidity = re.findall(r'Node3_humidity:(.*) Node4_temperature', recv) humidity.append(int(Node3_humidity[0])) Node4_temperature = re.findall(r'Node4_temperature:(.*) Node4_humidity', recv) temp.append(int(Node4_temperature[0])) Node4_humidity = re.findall(r'Node4_humidity:(.*) Node5_temperature', recv) humidity.append(int(Node4_humidity[0])) Node5_temperature = re.findall(r'Node5_temperature:(.*) Node5_humidity', recv) temp.append(int(Node5_temperature[0])) Node5_humidity = re.findall(r'Node5_humidity:(.*) ', recv) humidity.append(int(Node5_humidity[0])) print("5个结点的温度分别为:") print(temp) print("5个结点的湿度分别为:") print(humidity) 五.代码看起来有非常大的改进空间,我相信一定有很好的可以实现相同该类功能的算法,在此请路过的大佬留下建议,谢谢了^ _ ^


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3