Примите первое слово после совпадения с регулярным выражением - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь извлечь некоторую подстроку, используя регулярное выражение из строки. У меня в качестве параметра есть слово в моей функции, и цель состоит в том, чтобы извлечь следующее слово (мое определение слова) после этого соответствия. Я попробовал lookbehind и некоторые другие логики, но мне не удалось получить результаты, поэтому любая помощь приветствуется.

В качестве примера, приведенного в первом случае, я имею в качестве входных данных в моей функции: **THttpServer**

23:25:04.805: INFO: THttpServer: transportTCPChanged(state: DISCONNECTED 2)
23:25:13.120: INFO: THttpServer: transportUDPOpened(state: Port 54)

Ожидаемый результат: transportTCPChanged и transportUDPOpened для обоих случаев.

Другой случай, у меня в качестве ввода CurrentUserConnection

23:25:16.622: INFO: CurrentUserConnection#1:RQ : subscribed(userID: 1)
23:25:16.622: INFO: CurrentUserConnection#8:RP : disconnected

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

Вещи, которые я пробовал (внешний вид меняется в зависимости от примера) на Notepad ++:

(?<=THttpServer)(\w+): нет совпадений (?<=THttpServer)(.*): очевидно, возвращает все предложение, а не ожидаемое совпадение

Я немного растерялся, может быть, это даже невозможно? Или мне нужна предварительная обработка?

1 Ответ

1 голос
/ 25 марта 2019

Вам необходимо сопоставить : после THttpServer и любые несловарные символы вплоть до слова и совпадения и захватить его с (\w+).

Например, вы можете использовать

THttpServer:\W*(\w+)

См. regex demo .

Подробности

  • THttpServer: - буквенная подстрока
  • \W* - любые 0+ несловарных символов
  • (\w+) - Группа захвата 1 (позднее доступная через m.group(1)): 1 или более словарных символов.

См. Демонстрационную версию Python :

import re
strs = ['23:25:04.805: INFO: THttpServer: transportTCPChanged(state: DISCONNECTED 2)',
        '23:25:13.120: INFO: THttpServer: transportUDPOpened(state: Port 54)']

rx = re.compile(r'THttpServer:\W*(\w+)')
for s in strs:
    m = rx.search(s)
    if m:
        print("Found '{}' in '{}'.".format(m.group(1), s))

Выход:

Found 'transportTCPChanged' in '23:25:04.805: INFO: THttpServer: transportTCPChanged(state: DISCONNECTED 2)'.
Found 'transportUDPOpened' in '23:25:13.120: INFO: THttpServer: transportUDPOpened(state: Port 54)'.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...