gpt4 book ai didi

Python,复杂的正则表达式解析器

转载 作者:行者123 更新时间:2023-11-28 17:14:00 26 4
gpt4 key购买 nike

所以我正在研究使用正则表达式解析代码,并且想知道是否有比我目前使用的方法更简单的方法。我将从一个我将要解析的字符串示例开始:

T16F161A286161990200040000\r(串口传过来的数据)

现在我首先需要检查确认码,这是代码的前 9 个字符。它们必须完全是 T16F161A2。如果这 9 个字符完全匹配,我需要检查接下来的 3 个字符,它们必须是 86137F

如果这 3 个字符是 37F 我让它做一些我仍然需要编码的事情,所以我们不必担心那个结果。

但是,如果这 3 个字符是 861,我需要它检查后面的 2 个字符,看看它们是什么。它们可以是 11146061F0 >F1F2。其中每一个都对前面的数据执行不同的操作。

最后我需要遍历剩余的字符,将它们中的每 2 个配对在一起。

有关其工作原理的示例,这是我拼凑在一起以解析上面发布的示例字符串的代码:

import re

test_string = "T16F161A286161990200040000\r"

if re.match('^T16F161A2.*', test_string):
print("Match: ", test_string)
test_string = re.sub('^T16F161A2', '', test_string)
if re.match('^861.*', test_string):
print("Found '861': ", test_string)
test_string = re.sub('^861', '', test_string)
if re.match('^61.*', test_string):
print("Found '61' : ", test_string)
test_string = re.sub('^61', '', test_string)
for i in range(6):
if re.match('^[0-9A-F]{2}', test_string):
temp = re.match('^[0-9A-F]{2}', test_string).group()
print("Found Code: ", temp)
test_string = re.sub('^[0-9A-F]{2}', '', test_string)

现在您可以在这段代码中看到,在每一步之后,我都使用 re.sub() 来删除我刚刚要查找的字符串部分。考虑到这一点,我的问题如下:

有没有办法在解析字符串并找到我需要的数据的同时保持字符串的完整性?它会比我目前拥有的效率更高还是更低?

最佳答案

此任务不需要正则表达式,您可以使用 if/else block 和一些字符串替换:

test_string = "T16F161A286161990200040000\r"

def process(input):
# does a few stuff with 11, 14, 60, 61, F0, F1, or F2
return

def stringToArray(input):
return [tempToken[i:i+2] for i in range(0, len(tempToken), 2)]



if not test_string.startswith('T16F161A2'):
print ("Does not match")
quit()
else:
print ("Does match")

tempToken = test_string[9:]

if tempToken.startswith('861'):
process(tempToken) #does stuff with 11, 14, 60, 61, F0, F1, or F2
tempToken = tempToken[5:]

print (stringToArray(tempToken))
else:
pass

直播可以看到here

关于Python,复杂的正则表达式解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45416820/

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