问题 8:解析和提取 URL 中的数据

在处理网络上的文件和资源时,您经常会遇到 URI 和 URL,这些 URI 和 URL 可以直接解析和处理。大多数标准库都包含用于解析和构造此类标识符的类,但如果您需要在日志或更大的文本语料库中匹配它们,则可以使用正则表达式轻松地从其结构化格式中提取信息。

URI 或统一资源标识符是资源的表示形式,通常由方案主机端口(可选)和资源路径组成,分别突出显示如下。

http://regexone.com:80/page

方案描述了用于通信的协议,主机和端口描述了资源的来源,完整路径描述了资源在来源中的位置。

在下面的练习中,尝试提取所有列出资源的协议、主机和端口。

练习 8:从 URL 中提取数据
任务 文本 捕获组  
捕获 ftp://file_server.com:21/top_secret/life_changing_plans.pdf ftp file_server.com 21 To be completed
捕获 https://regexone.fullstack.org.cn/lesson/introduction#section https regexone.com To be completed
捕获 file://localhost:4040/zip_file file localhost 4040 To be completed
捕获 https://s3cur3-server.com:9999/ https s3cur3-server.com 9999 To be completed
捕获 market://search/angry%20birds market search To be completed
解决方案

我们必须匹配所有三个组件

  • 我们列表中的协议都是字母数字的,因此可以使用(\w+)://进行匹配。
  • 主机可以包含非字母数字字符,如连字符或句点,因此我们必须使用://([\w\-\.]+)专门包含这些字符。
  • 端口是 URI 的可选部分,前面带有冒号,可以使用(:(\d+))进行匹配。

为了将所有这些组合在一起,我们得到了完整的正则表达式(\w+)://([\w\-\.]+)(:(\d+))?来捕获我们正在寻找的所有数据。

解决上述任务以继续下一个问题,或阅读解决方案