Как захватить несколько шаблонов с помощью регулярных выражений? - PullRequest
1 голос
/ 31 мая 2019

У меня есть несколько текстовых файлов, содержащих значения ошибок.Значения разные в каждом файле, и поэтому я не могу получить точную строку, где присутствует значение.

Пример выглядит следующим образом:

v1 = 1111
v2 = A:10 B:2

Текст:

12.10.08,11:12:39,183769  1111,10352,003,12,11:12:39,183 Syntax-->12345

(хотел бы захватить v1)

01.01.02,06:10:56,243648  00488,00000,018,01,06:10:56,243 A:10 B:2--1212 (would like to capture v2)

Регулярное выражениевыглядит следующим образом:

((\d{2}[.]\d{2}[.]\d{2}),(\d{2}[:]\d{2}[:]\d{2},\d*\s*(('+v1+')[,].*|\S*\s('+v2+')).*))

Независимо от переданного значения, оно должно пройти через текст и захватить значение.Если v1 присутствует, должен предоставить полный текст, и если v2 присутствует то же самое.Но с одним уравнением регулярного выражения.

1 Ответ

1 голос
/ 03 июня 2019

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

\d{2}\.\d{2}\.\d{2},\d{2}:\d{2}:\d{2},\d{6}(?: \d{5}(?:,\d+)+:\d{2}:\d{2},\d+)? (\d{4}\b|[A-Z]:\d{2} [A-Z]:\d)

Объяснение

  • \d{2}\.\d{2}\.\d{2},\d{2}:\d{2}:\d{2},\d{6} Соответствовать формату начальных цифр
  • (?: \d{5}(?:,\d+)+:\d{2}:\d{2},\d+)? При желании сопоставьте часть, начиная с 5 цифр, до времени, подобного формату
  • ( Группа захвата
    • \d{4}\b Совпадение 4 цифр
    • | Или
    • [A-Z]:\d{2} [A-Z]:\d Соответствие A:10 B: формат
  • ) Закрыть группу

Regex demo

...