Регулярное выражение для сопоставления указанной c подстроки строки - PullRequest
2 голосов
/ 05 февраля 2020

У меня есть файл журнала, в котором регистрируются потери соединения компьютеров в локальной сети. Я хочу извлечь имя каждого компьютера из каждой строки файла журнала, и для этого я делаю это: (?<=Name:)\w+|(-PC)

Целевой текст:

 `[C417] ComputerName:KCUTSHALL-PC UserID:GO kcutshall Station 9900 (locked) LanId: | (11/23 10:54:09 - 11/23 10:54:44) | Average limit (300) exceeded while pinging www.google.com [74.125.224.147] 8x

[C445] ComputerName:FRONTOFFICE UserID:YB Yenae Ball Station 7C  LanId: | (11/23 17:02:00) | Client is connected to agent.`

enter image description here

Проблема в том, что в некоторых именах компьютеров есть -PC, а в некоторых нет. Выражение, которое я создал, соответствует компьютеру без -PC в их именах, но если у компьютера есть -PC в имени, оно рассматривает это как отдельное совпадение, и я этого не хочу. Короче говоря, это дает мне 3 матча, но я хочу только 2. Вот почему мне нужна помощь, я новичок в регулярных выражениях.

1 Ответ

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

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

(?<=Name:)\w+(?:-PC)?

Подробности

  • (?<=Name:) - место, непосредственно предшествующее Name:
  • \w+ - 1+ слов символов
  • (?:-PC)? - необязательная группа без захвата, которая соответствует 1 или 0 вхождениям подстроки -PC.

Рассмотрите возможность использования границ слов, если вы необходимо сопоставить PC как целое слово,

(?<=Name:)\w+(?:-PC\b)?

См. regex demo .

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