📜  使用Python解析和处理 URL – 正则表达式

📅  最后修改于: 2022-05-13 01:54:19.853000             🧑  作者: Mango

使用Python解析和处理 URL – 正则表达式

先决条件: Python中的正则表达式

URL统一资源定位器由许多信息部分组成,例如域名、路径、端口号等。任何URL都可以使用正则表达式进行处理和解析。因此,要使用正则表达式,我们必须在Python中使用re库。

例子:

URL: https://www.geeksforgeeks.org/courses
When we parse the above URL then we can find

Hostname: geeksforgeeks.com
Protocol: https

我们正在使用 re 库的re.findall( )函数在 URL 中搜索所需的模式。

现在,让我们看一下示例:

示例 1:在本示例中,我们将从给定的 URL 中提取协议和主机名。

  • 提取协议组的正则表达式: ' (\w+):// '
  • 用于提取主机名组的正则表达式:' ://www.([\w\-\.]+) '

使用的元字符:

  • \w:匹配任何字母数字字符,这相当于类 [a-zA-Z0-9_]。
  • +:前面字符出现一次或多次。

代码:

Python3
# import library
import re  
  
# url link
s = 'https://www.geeksforgeeks.org/'
  
# finding the protocol 
obj1 = re.findall('(\w+)://',
                  s)
print(obj1)
  
# finding the hostname which may
# contain dash or dots
obj2 = re.findall('://www.([\w\-\.]+)', 
                  s)
print(obj2)


Python3
# import library
import re  
  
# url link
s = 'file://localhost:4040/abc_file'
  
# finding the file capture group
obj1 = re.findall('(\w+)://', s)  
print(obj1)
  
# finding the hostname which may 
# contain dash or dots
obj2 = re.findall('://([\w\-\.]+)', s)
print(obj2)
  
# finding the hostname which may 
# contain dash or dots or port
# number
obj3 = re.findall('://([\w\-\.]+)(:(\d+))?', s)
print(obj3)


Python3
# import library
import re
  
# url
s = 'http://www.example.com/index.html' 
  
# searching for all capture groups
obj = re.findall('(\w+)://([\w\-\.]+)/(\w+).(\w+)',
                 s)
  
print(obj)


输出:

['https']
['geeksforgeeks.org']

示例 2:如果 URL 是不同的类型,例如 ' file://localhost:4040/zip_file ',并带有端口号,则提取端口号,因为它是可选的,我们将使用'? '符号。这里端口号“ 4040”出现在“:”符号之后。因此,因为它是一个数字(:(\d+))被使用。由于所有 URL 不以主机号结尾,因此为了使其成为可选,此语法使用'(:(\d+))?'。

使用的元字符:

  • \d:匹配任意十进制数字,相当于设置类[0-9]。
  • +:前面字符出现一次或多次。
  • ?:匹配零次或一次。

代码:

Python3

# import library
import re  
  
# url link
s = 'file://localhost:4040/abc_file'
  
# finding the file capture group
obj1 = re.findall('(\w+)://', s)  
print(obj1)
  
# finding the hostname which may 
# contain dash or dots
obj2 = re.findall('://([\w\-\.]+)', s)
print(obj2)
  
# finding the hostname which may 
# contain dash or dots or port
# number
obj3 = re.findall('://([\w\-\.]+)(:(\d+))?', s)
print(obj3)

输出:

['file']
['localhost']
[('localhost', ':4040', '4040')]

例3:对于一般的URL,可以使用this,也可以构造路径元素。

Python3

# import library
import re
  
# url
s = 'http://www.example.com/index.html' 
  
# searching for all capture groups
obj = re.findall('(\w+)://([\w\-\.]+)/(\w+).(\w+)',
                 s)
  
print(obj)

输出:

[('http', 'www.example.com', 'index', 'html')]