【发布时间】:2016-05-12 21:04:01
【问题描述】:
我希望使用正则表达式解析一些文本,并且我需要能够在两个不同的标签下抓取相同的文本,同时只在第二个标签上的某个字符之前捕获文本。这是我试图引入的文本示例。
Reputation=High risk ProtocolP=SSL client Web_Application=YouTube URL=https://youtube.com
这是我目前写的正则表达式。
^Reputation=(?<rep>.*?)\sProtocol=(?<prot>.*?)\sWeb_Application=(?<webapp>.*?)\sURL=(?<url>[http|https].*?)\sSource_IP=(?<sip>.*?)\s
这得到了我最初需要的东西,但我需要为 URL 部分添加第二个标签以仅获取域名。例如,只有https://youtube.com
当然,如果域恰好是 https://m.youtube.com,那么它也应该被捕获。
有没有办法做到这一点?
【问题讨论】:
-
Reputation=High risk ProtocolP=SSL client Web_Application=YouTube URL=https://youtube.com这是原始数据。不,很遗憾我没有 XML 片段解析能力。 -
尝试将
URL=(?<url>[http|https].*?)更改为URL=(?<url>(?:http|https)://(?<domain>[^/]+).*?)。见regex101.com/r/pB0tN7/1 -
不幸的是,由于某种原因,这不起作用。我有这种作品有时
URL=(?<url>https?://(?<domain>[^/s]+)(?:/[^s]+)?)\s+问题是它在捕获的内容中非常受欢迎。有时它会同时获取 URL 和域,有时什么都没有。 https:// 在域名后面的 / 后面什么都没有,或者有时它的 http:// 在域名后面的 / 后面什么都没有。我不确定如何保证每次都捕获 URL 和域 -
试试
URL=(?<url>https?://(?<domain>[^/\s]+)(?:/[^\s]+)*)- 您在s之前省略了\,并且您需要在第一个否定字符类中使用/。 -
这正是我想要的。这就像一个冠军!非常感谢。
标签: regex