Python 正则表达式 补充

cuiqingcai大佬《Python3 网络爬虫开发实战》整理

贪婪与非贪婪

import re

content = 'Hello 12345678 Word_This is a Regex Demo'

result = re.match('^He.*(\d+).*Demo$', content)

print(result.group(1))

原本打算取出12345678,

运行结果:8

贪婪匹配模式:.* 会匹配尽可能多的字符。

.*后(\d+)至少匹配一个数字,未指定具体数字。因此,.*尽可能匹配多的字符,把1234567匹配,给\d+留下一个仅满足条件的结果8。

so,最后结果就至于8了。

 

非贪婪模式匹配:.*?  尽可能匹配少的字符,余下交给后面的去匹配。

在.*后加一个?

import re

content = 'Hello 12345678 World_This is a Regex Demo'

result = re.match('^He.*?(\d+).*Demo$', content)

print(result.group(1))

运行结果:12345678

 所以,匹配时,字符中间尽量用非贪婪匹配,以免出现匹配结果确实的情况。若是匹配结果在字符串结果,.*?有可能匹配不到任何内容,因为它会匹配尽可能少的字符。

import re

content = 'http://weibo.com/comment/kEraCN'

result1 = re.match('^h.*?comment/(.*?)', content)

result2 = re.match('^h.*?comment/(.*)', content)

print('result1', result1.group(1))

print('result2', result2.group(2))

 

 修饰符

修饰符

描述

re.I

使匹配对大小写不敏感
re.L做本地化识别(local-aware)匹配
re.M多行匹配,影响^和$
re.S使.匹配包括换行符在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响\w、\W、\b和\B
re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解

 

转义匹配 \

 

match()  从字符串的开头开始匹配,若开头不匹配,整个匹配失败。更适合用来检测某个字符串是否符合某个正则表达式的规则。

search()  搜索整个字符串,然后返回第一个成功匹配的结果

findall()  搜索整个字符串,然后返回匹配正则表达式的所有内容

 

sub()  修改文本

sub('参数1', '参数2', content)

参数1传入修改匹配的表达式,参数2替换内容.

经过sub()处理后在用XX方法匹配,效果可能会更好。

 

compile()  将正则表达式编译成对象,后面匹配可复用。

compile()中可传入修饰符,这样在search()、findall()方法中就不需额外再传了。

 

转载于:https://www.cnblogs.com/hyeTi/p/9568897.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值