Регулярные выражения строго соответствуют двум строкам с разными окончаниями - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь найти следующий текст в лог-файле:

2019-05-22 03:40:01 INFO  ReporteClaro:194 - Termino de procesar archivo

2019-05-22 03:40:01 INFO  ReporteClaro:208 - Termino de procesar Transaction Report

Содержит те же слова, кроме тех, что в конце (archivo) и (Payment Report).

Я пробовал это:

[\d]+-[\d]+-[\d]+ [\d]+:[\d]+:[\d]+ INFO  ReporteClaro:[\d]+ - Termino de procesar (archivo|Transaction Report)

Но это необязательное совпадение из-за оператора |.Это означает, что он будет соответствовать первой или второй строке, но мне строго нужно регулярное выражение, чтобы соответствовать им обоим.Я думал, что-то вроде этого, но, очевидно, не будет работать:

[\d]+-[\d]+-[\d]+ [\d]+:[\d]+:[\d]+ INFO  ReporteClaro:[\d]+ - Termino de procesar (archivo&Transaction Report)

PD: я пробовал другое решение, используя \ n, но есть ли способ достичь того же результата без повторения?:

[\d]+-[\d]+-[\d]+ [\d]+:[\d]+:[\d]+ INFO  ReporteClaro:[\d]+ - Termino de procesar archivo\n

[\d]+-[\d]+-[\d]+ [\d]+:[\d]+:[\d]+ INFO  ReporteClaro:[\d]+ - Termino de procesar Transaction Report

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Это получит их как группу, и все промежуточное.

(?s)[\d]+-[\d]+-[\d]+[ ][\d]+:[\d]+:[\d]+[ ]INFO[ ]ReporteClaro:[\d]+[ ]-[ ]Termino[ ]de[ ]procesar[ ](?:archivo|Transaction[ ]Report)(?:.*?[\d]+-[\d]+-[\d]+[ ][\d]+:[\d]+:[\d]+[ ]INFO[ ]ReporteClaro:[\d]+[ ]-[ ]Termino[ ]de[ ]procesar[ ](?:archivo|Transaction[ ]Report))*  

Читаемая версия

 (?s)

 [\d]+ - [\d]+ - [\d]+ [ ] [\d]+ : [\d]+ : [\d]+ [ ] INFO [ ] ReporteClaro: 
 [\d]+ [ ] - [ ] Termino [ ] de [ ] procesar [ ] 
 (?: archivo | Transaction [ ] Report )

 (?:
      .*? [\d]+ - [\d]+ - [\d]+ [ ] [\d]+ : [\d]+ : [\d]+ [ ] INFO [ ] ReporteClaro: 
      [\d]+ [ ] - [ ] Termino [ ] de [ ] procesar [ ] 
      (?: archivo | Transaction [ ] Report )
 )*
1 голос
/ 23 мая 2019

Если «archivo» и «Transaction Report» - это единственные значения, которые вы ожидаете после «Termino de processar», то есть нет ничего похожего на «Termino de processar Something Else».Вы можете просто сделать следующее.

r"^.+Termino de procesar.+$"gm

demo

По сути, это будет все от начала строки до концаесли в них есть фраза «Termino de processar».

В случае, если есть другие записи журнала, в которых есть «Termino de processar» и что-то, что вам не нужно, вы можете использовать следующее.

r"^.+Termino de procesar archivo.*$|^.+Termino de procesar Transaction Report.*$"gm

demo2

Я считаю простоту, как правило, лучшим решением.Нет необходимости явно выбирать материал даты и времени или «ReporteClaro», просто используйте все уловки, чтобы захватить его.Проще понять regex imo.

Редактировать: вам нужны модификаторы gm, если вы не читаете их построчно.

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