如何使用re.findall()查找以'='号分隔的单词

时间:2019-02-08 11:12:59

标签: regex python-3.x

我正在读取包含下一个文件:

//some text

Integral of Qr over area magnitude of patch B1_TE16_B1_TE4[0] = -1073.40295735

//some more text

Integral of Qr over area magnitude of patch B1_TE16_B1_TE11[1] = 1099.13456362

//some more text

Integral of Qr over area magnitude of patch B1_TE16_B1_TE13[2] = 1025.13456362

我使用re.findall('Integral of Qr over area magnitude of patch ([\w\.-]+)'),并且能够找到没有索引号的所有三个名称'B1_TE16...'

现在,我要实现的是下一个输出:

[('B1_TE16_B1_TE4[0]', '-1073.40295735'), ('B1_TE16_B1_TE11[1]', '1099.13456362'), ('B1_TE16_B1_TE13[2]', '1025.13456362')]

关于如何实现这一目标的任何提示?

1 个答案:

答案 0 :(得分:1)

您可以使用

r'Integral of Qr over area magnitude of patch ([\w.-]+\[\d+])\s*=\s*(-?\d*\.?\d+)'

请参见regex demo

详细信息

  • ([\w.-]+\[\d+])-第1组:一个或多个单词.-字符,[,1个或多个数字,然后是]
  • \s*=\s*-一个=包含0+空格
  • (-?\d*\.?\d+)-第2组:一个可选的-,0+个数字,一个可选的.和1+个数字

Python demo

import re
s = """//some text
Integral of Qr over area magnitude of patch B1_TE16_B1_TE4[0] = -1073.40295735
//some more text
Integral of Qr over area magnitude of patch B1_TE16_B1_TE11[1] = 1099.13456362
//some more text
Integral of Qr over area magnitude of patch B1_TE16_B1_TE13[2] = 1025.13456362"""
rx = r'Integral of Qr over area magnitude of patch ([\w.-]+\[\d+])\s*=\s*(-?\d*\.?\d+)'
print(re.findall(rx, s))
# => [('B1_TE16_B1_TE4[0]', '-1073.40295735'), ('B1_TE16_B1_TE11[1]', '1099.13456362'), ('B1_TE16_B1_TE13[2]', '1025.13456362')]