学会python正则表达式,这2篇文章就够了(二)

学会python正则表达式,这2篇文章就够了(一)

目录

分组、组号调用与起别名

re.findall()

 re.sub()

贪婪模式与非贪婪模式

re.compile()

小试牛刀 :邮箱匹配


书接上文,我们来介绍一下分组。

分组、组号调用与起别名

如下图所示,我们想匹配123456或者123556,因此我们将正则表达式设置为1234|556,但结果却和我们所想的不一样。这是因为‘|’会自动的将其左右各分为一部分,分别匹配,因此对于a字符串匹配到了1234而b中既没有1234又没有556,因此返回为空。这时候要想按我们所想的实现,就需要用括号进行分组了,加上括号后,‘|’会将4和5各自作为一部分,这样就可以匹配到123456或者123556了。

 我们知道,可以用group函数将匹配到的结果调用显示,但是它显示的是整个结果,我们如果想单独看看匹配到的是4还是5,要怎么做呢?如下图所示,可以在group()中根据数字进行调用,当有多个括号时,也可以按编号123等进行调用。需要注意的是下标并不是从0开始的。所以当我们想调用某一部分时,只需在正则中将对应部分加括号,引用时调用编号就可以了。

分组还有一个用处就是处理类似这样的字符串:<body><h1>xxxx<h1><body>,如下图所示,当按第一种方式时,带来的问题就是不论后面是否匹配,都会成功。为了解决这个问题,就需要用到\num了。

可以看到,当使用了\num之后,问题就解决啦。

上面方法虽然简单,但带来一个问题就是当编号过多时,很容易将编号记混,从而导致调用出错。因此起名的机制应运而生。如下图所示,我们可以用(?P<name>)的方式为括号内的内容起一个名字,这样后面调用的时候直接根据名字调用就行了。在起名的时候,我们可以根据括号内内容的特性,起不易记混的名字,减少出错的概率。当括号个数较多时,这样会方便很多。

re.findall()

 findall()函数是要找出所有符合条件的,与match、search的区别可在下图体现。需要注意的是findall()没有group()属性,但可以用print打印。

 re.sub()

该函数的功能是将匹配到的字符串替换成其他字符串,具体如下图:

re.sub()还有更复杂的用法, 第二个参数可以不是字符串,而是一个函数,结果如下图:

 

贪婪模式与非贪婪模式

贪婪模式是指,在满足匹配条件的情况下,尽可能多的匹配字符,而非贪婪模式是指满足条件后立刻停止,尽可能少的匹配字符。在默认情况下进行匹配时是贪婪模式,如果贪婪模式的结果不满足要求,需要对正则表达式进行约束才能获得正确结果,一般的约束是指通过在表达式中添加‘?’来将多个字符限制在一个以内。贪婪模式与非贪婪模式只需在使用出错时稍加注意即可。

如下图所示:

re.compile()

compile用于编译正则表达式,生成一个正则表达式对象,供re模块其他函数调用。

 

小试牛刀 :邮箱匹配

要求:邮箱只能是126、163、qq、gmail中的一种,前面的名字必须满足命名规则,即只能是字母数字下划线且只能是字母开头。具体如下图所示:

可以看到,由于开头必须是字母,因此前面第一个[]内只能是字母,后面要求字母数字下划线至少有1个,至多20个,只有a和d满足要求。

行文至此,python正则表达式的内容基本上都介绍到了,如果有什么不明白的,可以在评论区提问,一起探索。下篇将会将正则表达式应用于文件内容修改。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值