在以下文本中:
text = b'List ---\r\n\r\nDATA 0:\r\n SN: 1234656AZDSQVC\r\n FW: DSQ\r\n\r\nDATA 1:\r\n SN: 1234ZDS656AQVC\r\n FW: 656A\r\n\r\n----------------------------------\r\n\r\n\r\n'
我正在寻找两个匹配项,“ 0”然后“ 1”。
我尝试了以下正则表达式
arrayResult = re.findall(".*(?:DATA.*([\d])+.*SN:).*",text)
但是我只得到最后一个匹配:“ 1”,而不是第一个“ 0”。如果我添加更多数据,我总是得到最后一个...
arrayResult: ['1']
在同一文本中,我实际上正在寻找多个元组匹配:
我尝试了以下正则表达式,但没有成功(我只得到了最后一个元组):
arrayResult = re.findall(r".*(?:DATA.*([\d])+.*SN:[\s]+([\d\w]+).*FW:[\s]+([\d\w]+)).*",text)
找到这些元组的正确方法是什么?
答案 0 :(得分:0)
这似乎可行:
text = b'List ---\r\n\r\nDATA 0:\r\n SN: 1234656AZDSQVC\r\n FW: DSQ\r\n\r\nDATA 1:\r\n SN: 1234ZDS656AQVC\r\n FW: 656A\r\n\r\n----------------------------------\r\n\r\n\r\n'
matches = re.findall(r'\b(\d+):.*?\bSN: ([\dA-Z]+).*?FW: ([\dA-Z]+)', text, flags=re.DOTALL)
print(matches)
此打印:
[('1234656AZDSQVC', 'DSQ'), ('1234ZDS656AQVC', '656A')]
我使用的正则表达式模式仅针对前导0:
或1:
节前缀,然后对SN:
和FW:
的内容使用两个捕获组。
不确定您的text
字符串。如果以上方法都不适合您,请不要将文本设置为字节字符串。