Как найти слова, разделенные знаком «=», используя re.findall () - PullRequest
0 голосов
/ 08 февраля 2019

Я читаю файл, который содержит следующее:

//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 голосов
/ 08 февраля 2019

Вы можете использовать

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

См. Демоверсию regex

Подробности

  • ([\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')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...