gpt4 book ai didi

python - 在 Python 中解析具有可变字段大小的字符串

转载 作者:行者123 更新时间:2023-11-30 22:10:08 24 4
gpt4 key购买 nike

我有这个长度为 66 的字符串。RP000729SP001CT087ET02367EL048TP020DS042MF0220LT9.300000LN4.500000。两个字母(如 RP 等关键字)显示下一个值,直到下一个关键字。

现在我正在解析字符串,保持两个关键字之间的字节数不变,即 RPSP 之间的 000729。下面是这样解析的代码。

msgStr = "RP000729SP001CT087ET02367EL048TP020DS042MF0220LT9.300000LN4.500000"

Ppm = msgStr[msgStr.find("RP")+2:msgStr.find("SP")]
Speed = msgStr[msgStr.find("SP")+2:msgStr.find("CT")]
Coolent_temp = msgStr[msgStr.find("CT")+2:msgStr.find("ET")]
ETime = msgStr[msgStr.find("ET")+2:msgStr.find("EL")]
E_load = msgStr[msgStr.find("EL")+2:msgStr.find("TP")]
Throttle_pos = msgStr[msgStr.find("TP")+2:msgStr.find("DS")]
Distance = msgStr[msgStr.find("DS")+2:msgStr.find("MF")]
MAF = msgStr[msgStr.find("MF")+2:msgStr.find("LT")]
Lat = msgStr[msgStr.find("LT")+2:msgStr.find("LN")]
Lon = msgStr[msgStr.find("LN")+2:]

print Ppm, Speed, Coolent_temp, ETime, E_load, Throttle_pos, Distance, MAF, Lat, Lon

输出:

000729 001 087 02367 048 020 042 0220 9.300000 4.500000

现在我想收集两个关键字之间是否有任意数量的字节。下面给出了示例

示例 1:

Example1_msgStr= "RP729SP14CT087ET2367EL48TP20DS42MF0220LT0.000000LN0.000000"

预期输出 1:

729 14 087 2367 48 20 42 0220 0.000000 0.000000

示例 2:

Example2_msgStr = "RP72956SP134CT874ET02367EL458TP20DS042MF0220LT53.000LN45.00" 

预期输出 2:

72956 134 874 02367 458 20 042 0220 53.000 45.00 

最佳答案

您应该使用正则表达式来查找两个字符串之间的可变长度匹配:

import re
regex = r'RP(\d+)SP'
strings = ['RP729SP14CT087ET2367EL48TP20DS42MF0220LT0.000000LN0.000000',
'RP72956SP134CT874ET02367EL458TP20DS042MF0220LT53.000LN45.00']
for string in strings:
match = re.search(regex,string)
print('Matched:',match.group(1))

在正则表达式中,方括号 () 指定要存储的组,\d+ 表示 1 个或多个数字字符。因此整个正则表达式 RP(\d+)SP 将在 RP 和 SP 之间找到一个可变长度的数字字符串。

这向您展示了如何执行一种情况,您需要循环遍历分隔符(RP、SP、CT 等)以捕获您想要的所有信息。如果分隔符始终以相同的顺序出现,您可以构建一个巨大的正则表达式来一次捕获所有组......

关于python - 在 Python 中解析具有可变字段大小的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51741160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com