Как я могу получить определенные данные с помощью регулярных выражений, если они зависят от другого поля? - PullRequest
0 голосов
/ 10 марта 2020

Мне нужна помощь в написании регулярных выражений для указанного ниже журнала:

URLReputation: Risk unknown, URL: http://facebook.com

Я написал регулярное выражение, как показано ниже:

URLReputation\:\s*(.*?),\s*URL\:\s*(.*)

Здесь все работает. Но если URL-адрес отсутствует, URLReputation также не будет записан.

Пожалуйста, помогите.

С уважением,

Клещ sh Агравал

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Вы можете превратить не жадного .*? в класс отрицанных символов [^,]+ и сопоставить любой символ, кроме запятой. Затем сделайте часть URL необязательной, используя необязательную группу без захвата (?:...)?

. Вы хотите захватить значение URL-адреса, используя .*, но это также может совпадать с пустой строкой.

Вы можете сделать шаблон более точным c, сопоставив хотя бы один непробельный символ \S+ или использовать шаблон, например, указав начало https?://\S+

URLReputation:\s*([^,]+)(?:,\s*URL:\s*(\S+))?

Regex demo

0 голосов
/ 11 марта 2020

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

/URLReputation: +(.*?)(?:, +URL:\ +(.*))?$/

Демонстрация

Главным образом для улучшения читабельности я изменил каждый \s на пробел, поскольку кажется, что пробелы - это единственные пробельные символы, которые вы хотите сопоставить с помощью sh .

...