Python 中的正则分组

正则分组作用

正则分组作用,一般用于在满足整体规则基础上,对局部进行提取

 

正则分组语法及示例

下面我们看下其语法规则:  

        在正则表达式中,我们使用括号把正则进行分组

基本示例:

import re
# 这是爬虫常用的一个正则,用于提取网址
# 例如我想提取里面的网址,我们就可以使用小括号把网站部分的正则包裹起来
res = re.search(r'src=(http://.+)',"src=http://www.baidu.com/hello/")

# 如果匹配命中则 提取里面的网址
if res:
    # 分组编号是从1开始的,所以我们就是group(1) 
    # 那么group(0) 是什么呢? 这个是我们整个的一个正则名字的字符
    url = res.group(1)

上面仅仅是其基本的使用规则,好了接下来咱们看看里面的更多的内容

先看下分组编号: 编号是从1开始,然后从左到右进行编号。

看示例:

import re

# 代码后面的注释 是我们运行提取的结果
# 提取分组0
re.search(r'(\W+)(([a-z]+)(\d+)[a-z]+)(\W+)',"###abc123feg!!!").group(0) # '###abc123feg!!!

# 提取分组1
re.search(r'(\W+)(([a-z]+)(\d+)[a-z]+)(\W+)',"###abc123feg!!!").group(1) # '###'

# 提取分组2
re.search(r'(\W+)(([a-z]+)(\d+)[a-z]+)(\W+)',"###abc123feg!!!").group(2) # 'abc123feg'

# 提取分组3
re.search(r'(\W+)(([a-z]+)(\d+)[a-z]+)(\W+)',"###abc123feg!!!").group(3) # 'abc'

# 提取分组4
re.search(r'(\W+)(([a-z]+)(\d+)[a-z]+)(\W+)',"###abc123feg!!!").group(4) # '123'

# 提取分组5
re.search(r'(\W+)(([a-z]+)(\d+)[a-z]+)(\W+)',"###abc123feg!!!").group(5) #'!!!'

在上面基础上我们来一点更复杂的,当遇到有分组嵌套分组的情况

看示例:

import re

# 看下面例子 我想除了想提取整个网址外,我还想提取里面的host

src_str = "src=http://www.baidu.com/hello/"

# 正则提取
res = re.search(r'src=(http://([^/]+).+)',src_str )

# 提取group 0
print(res.group(0))   # 'src=http://www.baidu.com/hello/'

# 提取group 1
print(res.group(1))   # 'http://www.baidu.com/hello/'

# 提取group 2 
print(res.group(2))  # 'www.baidu.com'

编号规则:从左向右,从外向内

除了编号以外,为了更方便我们提取,还给我们提供了一个方式 为分组起一个名字

import re

# 看下面例子 我想除了想提取整个网址外,我还想提取里面的host

src_str = "src=http://www.baidu.com/hello/"

# 正则提取 ,在分组基础上前面增加规定的格式 (?P<name>)  注意P是大写<>里面是当前分组的名字
res = re.search(r'src=(?P<url>http://(?P<host>[^/]+).+)',src_str )


# 提取所有分组内容
res.groups()  # ('http://www.baidu.com/hello/', 'www.baidu.com')

# 因为我们使用别名的方式,所以我们还可以获取一个字典匹配结果
res.groupdict()  # {'url': 'http://www.baidu.com/hello/', 'host': 'www.baidu.com'}

应用可以参考我另一篇: django中路由匹配中正则提取参数机制

学IT,上博学谷

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值