我希望使用正则表达式解析一些文本,我需要能够在两个不同的标签下抓取相同的文本,同时只捕获第二个标签上某个字符之前的文本。以下是我试图引入的文本示例。
Reputation=High risk ProtocolP=SSL client Web_Application=YouTube URL=https://youtube.com
这是我到目前为止所写的RegEx。
^Reputation=(?<rep>.*?)\sProtocol=(?<prot>.*?)\sWeb_Application=(?<webapp>.*?)\sURL=(?<url>[http|https].*?)\sSource_IP=(?<sip>.*?)\s
这让我得到了我最初需要的东西,但我需要为URL部分添加第二个标记以仅获取域名。例如,仅https://youtube.com
当然,如果域恰好是https://m.youtube.com
,那么也应该捕获它。
有办法做到这一点吗?
答案 0 :(得分:0)
您可以将网址匹配部分替换为URL=(?<url>https?://(?<domain>[^/\s]+)(?:/[^\s]+)*)
:
Reputation=(?<rep>.*?)\sProtocolP=(?<prot>.*?)\sWeb_Application=(?<webapp>.*?)\sURL=(?<url>https?://(?<domain>[^/\s]+)(?:/\S+)*)\sSource_IP=(?<sip>.*?)\s
请参阅regex demo
https?://
- 匹配http://
或https://
(?<domain>[^/\s]+)
- 域匹配部分,除/
以外的1个以上字符和空格(?:/\S+)*
- {+ 1}}的0 +序列,后跟除空格以外的1 +字符