每行多个匹配或使用正则表达式的多行多个匹配

2024-06-26 14:01:41 发布

您现在位置:Python中文网/ 问答频道 /正文

第一:简化问题

在以下案文中:

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']

下面是完整的问题:

在同一篇文章中,我实际上在寻找一个多元组匹配:

  • (“0”、“1234656AZDSQVC”、“DSQ”)
  • (“1”、“1234ZDS656AQVC”、“656A”)
  • (“9”、“1234ZDS6SXAXC”、“6BBA”)

我尝试了以下正则表达式,但没有成功(我只得到了最后一个元组):

arrayResult = re.findall(r".*(?:DATA.*([\d])+.*SN:[\s]+([\d\w]+).*FW:[\s]+([\d\w]+)).*",text)

找到这些元组的正确方法是什么?


Tags: 数据方法textredatalist元组sn
1条回答
网友
1楼 · 发布于 2024-06-26 14:01:41

这似乎有效:

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字符串。如果上述方法不适用于您,则不要将文本设置为字节字符串

相关问题 更多 >