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

本文介绍如何利用Python的re模块的findall方法从长字符串中提取多组固定格式的数据,例如temperature和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 '

从字符串中我们可以看到有五组格式相同的数据,每一组包含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)



五.代码看起来有非常大的改进空间,我相信一定有很好的可以实现相同该类功能的算法,在此请路过的大佬留下建议,谢谢了^ _ ^

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 回答1: 可以使用正则表达式来从字符串提取指定内容。例如,如果要从字符串提取所有的数字,可以使用以下代码: ```python import re string = "abc123def456ghi789" numbers = re.findall('\d+', string) print(numbers) ``` 输出结果为: ``` ['123', '456', '789'] ``` 其中,`\d+`表示匹配一个或多个数字。`re.findall()`函数会返回所有匹配的结果。 ### 回答2: Python作为一种广泛使用的编程语言,提供了很多方法和库来从字符串提取指定内容。以下是一些常用的方法: 1. 切片(Slice):使用切片操作可以从字符串中选择指定的部分。例如,可以使用以下代码从字符串提取第3到第6个字符: ``` string = "hello world" substring = string[2:6] print(substring) ``` 输出结果为:`llo `。 2. split()函数:使用split()函数可以将字符串拆分成多个子字符串,并返回一个字符串列表。例如,可以使用以下代码从字符串提取以空格分隔的第3到第5个单词: ``` string = "hello world this is python" words = string.split() substring = " ".join(words[2:5]) print(substring) ``` 输出结果为:`this is python`。 3. 正则表达式(Regular Expression):使用正则表达式可以在字符串中搜索和提取指定的模式。Python提供了re模块来支持正则表达式。例如,可以使用以下代码从字符串提取所有数字: ``` import re string = "there are 3 apples and 5 bananas" numbers = re.findall("\d+", string) print(numbers) ``` 输出结果为:`['3', '5']`。 4. 字符串方法(String Method):使用字符串方法可以对字符串执行各种操作,包括查找、替换、删除等。Python提供了丰富的字符串方法,如find()、replace()、strip()等。例如,可以使用以下代码从字符串提取不包含首尾空格的子字符串: ``` string = " hello world " substring = string.strip() print(substring) ``` 输出结果为:`hello world`。 总之,Python提供了多种从字符串提取指定内容的方法和技术,开发人员可以根据具体情况选择最合适方法。 ### 回答3: Python是一种易学易用的编程语言,因其强大的文本处理能力在数据处理和自然语言处理领域广受欢迎。从字符串提取指定内容Python文本处理的常见需求,可以使用正则表达式、字符串截取等方法实现。 1. 正则表达式: 正则表达式是字符串匹配的利器,可以通过指定的模式从文本中匹配出所需的内容Python中内置了re模块,通过调用其函数实现字符串的正则匹配。例如: ```python import re str = 'Hello world 123' result = re.search(r'\d+', str) print(result.group(0)) # 输出:123 ``` 以上代码使用re.search函数匹配字符串中的数字,并使用group函数返回匹配到的结果。其中,`\d+`表示匹配一个或多个数字。 2. 字符串截取: 通过指定字符串的起止位置,可以实现从字符串中截取所需的内容Python提供了灵活的字符串切片方式,使用`str[start:end]`的形式即可实现字符串截取。例如: ```python str = 'ABCDEFG' result = str[1:4] print(result) # 输出:BCD ``` 以上代码使用`str[1:4]`方式截取字符串的第2个到第4个字符,返回了所需的内容。 需要注意的是,正则表达式和字符串截取均需要根据字符串的特点和匹配规则来实现,必要时可以通过组合使用不同的方式来实现更加复杂的文本处理需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值