Regex lookbehind игнорируя пробельные символы - PullRequest
0 голосов
/ 15 марта 2019

Я хотел бы показать вам мой подход к проблеме, с которой я столкнулся, и, возможно, вы можете помочь мне с конкретной проблемой или даже изменить подход.

У меня есть несколько таких строк журнала, возьмем, к примеру, две:

00:00:02.673: INFO: sesison1::logging : logSessionStarted(ch...")
EntrySuccessfull::execute

Как вы можете видеть, некоторые из них имеют метку времени, а некоторые нет, проблема в том, что я хочу получить все данные до первого вхождения '::'.

Теперь со вторым случаем все просто, примерно так работает:

(.*)(?=::)

Возвращает для всего набора данных:

00:00:02.673: INFO: sesison1
EntrySuccessfull

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

(?<=\s)(.*)(?=::)

Итак, наконец, я мог бы сделать что-то вроде find '::' и вернуться до пробела или начала строки, но это второе изменение возвращает те же самые результаты, как и игнорирование пробела перед sesision1.

Есть ли лучший подход или что-то не так?

PD все тесты, выполненные с помощью блокнота ++

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

\b соответствует границам слова, чтобы вы могли использовать \b\S+(?=::)

Это начинается с границы слова и соответствует нескольким непробельным символам, пока не достигнет ::

0 голосов
/ 15 марта 2019

С (\S+)(?=::) вы можете получить оба совпадения без нулевых совпадений. Пожалуйста, отметьте здесь .

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