python从字符串中提取指定内容
程序员文章站
2024-03-05 11:33:12
...
前言
我们在做数据处理的时候,会遇到包含多条格式类似的长字符串,比如说
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)