Регулярное выражение для получения после символа определенного шаблона - PullRequest
0 голосов
/ 04 февраля 2019

Строка ввода:

-line[8qWWQ5-swd-WER-DWDS]]<-SUCCESS#[14][MY_SAMPLE_TEST]
-line[8qWWQ5-swd-WER-DWDS]]<-SUCCESS#[4][MY_SAMPLE_TEST2]
-line[8qWWQ5-swd-WER-DWDS]]<Failed#[17][[14]SERVERERROR(TYPE-241)

Ожидаемый результат:

MY_SAMPLE_TEST
MY_SAMPLE_TEST2
SERVERERROR

Мое регулярное выражение: (?<=#).*

В приведенном выше регулярном выражении я могу получить все после #, также я попытался:

rex = (?<=#\[...\[).*(?=])

, который дает мне правильный вывод для первой строки, например: MY_SAMPLE_TEST, но поскольку во 2-й строке есть только одна цифра, то есть 4, поэтомуне соответствует, аналогичная проблема с 3-й строкой

Можно написать одно выражение, которое может дать ожидаемый результат?, Любая помощь будет велика

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Сделано предположение, что соответствующая строка должна заканчиваться непосредственно перед тем, как она найдет закрывающее] или начальное (символы. Вот рабочее регулярное выражение:

#(?:\[+\d+\]+)*\[?([^\(\]]+)(?:\(.+\))?\]?

Она работала с предоставленными выборками, не предполагая пробелов илиподчеркивания в тексте, который нужно извлечь. Вот демонстрационная ссылка: https://regexr.com/47muk

0 голосов
/ 04 февраля 2019

Вы можете зафиксировать эти значения, используя

#(?:\[+\d+]+)*\[*([^][()]+)

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

Подробности

  • # - знак хеша
  • (?:\[+\d+]+)* - 0 или более повторений:
    • \[+ - 1+ [ символов
    • \d+ - 1+ цифры
    • ]+ - 1+ ] символов
  • \[* - 0+ [ символов
  • ([^][()]+) -Группа 1: один или несколько символов, отличных от (, ), [ и ]

Python demo :

import re
strs = ['-line[8qWWQ5-swd-WER-DWDS]]<-SUCCESS#[14][MY_SAMPLE_TEST]', '-line[8qWWQ5-swd-WER-DWDS]]<-SUCCESS#[4][MY_SAMPLE_TEST2]', '-line[8qWWQ5-swd-WER-DWDS]]<Failed#[17][[14]SERVERERROR(TYPE-241)']
rx = re.compile(r'#(?:\[+\d+]+)*\[*([^][()]+)')
for s in strs:
    m = rx.search(s)
    if m:
        print(m.group(1))

Выход:

MY_SAMPLE_TEST
MY_SAMPLE_TEST2
SERVERERROR
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...