Регулярное выражение, чтобы определить, состоит ли строка из более чем 4 чисел - PullRequest
0 голосов
/ 27 марта 2019

Я хочу извлечь строки URL из журнала, который выглядит следующим образом:

<13> 27 марта 11:22:38 144.0.116.31 AgentDevice = WindowsDNS AgentLogFile = DNS.log PluginVersion = XXXX Дата = 3/27/2019 время = 11: 22: 34 AM Идентификатор потока = 11BC Контекст = Сообщение ПАКЕТА = Внутренний идентификатор пакета = 0000007A4843E100 Индикатор UDP / TCP = Индикатор отправки / получения UDP = Snd Удаленный IP = XXXX Xid (шестнадцатеричный) = 9b01 Запрос / ответ = R Код операции = Q Флаги (шестнадцатеричные) = 8081 Флаги (коды символов) = DR ResponseCode = NOERROR Тип вопроса = Имя вопроса = outlook.office365.com

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

Возможный способ - это (\d.*?){5,}, но, похоже, он не работает, просьба предложить другой способ получить поле.

Пример соответствия строк:

outlook12.office345.com outlook.office12345.com

Ответы [ 4 ]

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

Попробуйте это регулярное выражение

([a-z0-9]{5,}.[a-z0-9]{5,})+.com

https://regex101.com/r/OzsChv/3

Это группы,

outlook.office365.com
outlook12.office345.com

также все строки URL

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

Это регулярное выражение:

(?<=Name=).*\d{5,}.*?(?=\s|$)

будет извлекать строки типа outlook.office365666.com (с 5 или более последовательными цифрами) из вашего примера ввода.

Демонстрация: https://regex101.com/r/YQ5l2w/1

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

Вы можете найти следующее выражение:

Name=([^ ]*\d{5,}[^ ]*)

Объяснение: Name= искать все, что начинается с "Name =", чем захватывать, если: [^ ]* любое количество символов, которое не являетсяпробел \d{5,} затем 5 цифр подряд [^ ]* затем все цифры до пробела

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

Попробуйте этот шаблон: (?=\b.*(?:\d[^\d\s]*){5,})\S*

Пояснение:

(?=...) - позитивный взгляд, обеспечивающий совпадение шаблона внутри него:)

\b - граница слова

(?:...) - группа без захвата

\d[^\d\s]* - соответствует цифре \d, затем соответствует нулю или более любых символов, кроме пробела \s или цифры \d

{5,} - соответствует предыдущему шаблону 5 или более раз

\S* - соответствует нулю или более любых символов, кроме пробела, чтобы соответствовать строке, если утверждение верно, но я думаю, что вам просто нужно утверждение:)

Демо

Если вам нужны только последовательные числа, используйте упрощенный шаблон (?=\b.*\d{5,})\S*.

Еще одна демка

Конечно, вы должны добавить положительный вид сзади: (?<=Name=), чтобы утверждать, что у вас есть Name= строка, предшествующая

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