Regex Сопоставить несколько значений из одной строки - PullRequest
0 голосов
/ 28 февраля 2020

Я использую https://regexr.com/ для этого тестирования.

Регулярное выражение: (\d{4}\/\d{2}\/\d{2}\ (?:[01]\d|2[0123]):(?:[012345]\d):(?:[012345]\d))|(C:\\windows\\system32\\cmd.exe)|\.exe

Пример журнала:

2020/02/24 09:28:11 C:\windows\system32\cmd.exe notepad.exe

2020/02/24 10:23:22

2020/02/24 10:23:59

2020/02/24 10:23:22 C:\windows\system32\cmd.exe netstat.exe

2020/02/24 10:37:21 C:\windows\system32\cmd.exe nslookup.exe

Нужна помощь с: Я хочу получить дату и время, C: \ windows \ system32 \ cmd.exe и исполняемый файл из та же строка . Проблема возникла в том, что она соответствует всей дате. Я хочу получить дату / время вместе с другими 2 критериями, а не просто строки с датой / временем на нем.

Я хочу получить следующие результаты:

1. 2020/02/24 09:28:11 C:\windows\system32\cmd.exe notepad.exe
2. 2020/02/24 10:23:22 C:\windows\system32\cmd.exe netstat.exe
3. 2020/02/24 10:37:21 C:\windows\system32\cmd.exe nslookup.exe

Ответы [ 3 ]

2 голосов
/ 28 февраля 2020

Вы можете использовать группы захвата и указать все части, которые вы хотите сопоставить, не используя чередование |

^(\d{4}/\d{2}/\d{2}) ((?:[01]\d|2[0123]):[012345]\d:[012345]\d) (C:\\windows\\system32\\cmd\.exe) (\S+\.exe)$
  • ^ Начало строки
  • (\d{4}/\d{2}/\d{2}) Захват группа 1 Соответствие дате как образец
  • ((?:[01]\d|2[0123]):[012345]\d:[012345]\d) Захват группа 2 Соответствие времени как образец
  • (C:\\windows\\system32\\cmd\.exe) Захват группа 3 Соответствие windows пути
  • (\S+\.exe) Захват группа 4 Соответствие 1+ пробелам, точка и exe
  • $ Конец строки

Regex demo

0 голосов
/ 28 февраля 2020

Вот как бы я это сделал.

^(\d{4}\/\d{2}\/\d{2})\s(\d{2}:\d{2}:\d{2})\s(.+?\.exe\s.+?\.exe)$

Рабочая демонстрация

Это регулярное выражение дает вам 3 результата, которые вы ищете:

1. 2020/02/24 09:28:11 C:\windows\system32\cmd.exe notepad.exe
2. 2020/02/24 10:23:22 C:\windows\system32\cmd.exe netstat.exe
3. 2020/02/24 10:37:21 C:\windows\system32\cmd.exe nslookup.exe

(см. Демонстрационную ссылку)

0 голосов
/ 28 февраля 2020

Попробуйте это: ((\d{4}/\d{2}/\d{2}) \d{2}:\d{2}:\d{2}) (C:\\\\windows\\\\system32\\\\cmd\.exe) (.*\.exe))

Или

((\d{4}/\d{2}/\d{2}) (\d{2}:\d{2}:\d{2}) (C:\\windows\\system32\\cmd\.exe) (.*\.exe))

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