正则表达式re库在python3的应用

3 篇文章 0 订阅
2 篇文章 0 订阅

正则表达式可以从目标文本中快速查找,匹配,替换设置的模式,举个例子py,pyy,pyyy,pyyyy...这个模式就是一个p和一个以上的y组成,常规办法不能穷尽,而且非常麻烦,正则表达式里面直接使用py+就可以表达出来,非常方便.

比较常见的表达方式如下:

模式描述
^匹配字符串的开头
$匹配字符串的末尾。
.匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[...]用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
[^...]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re*匹配0个或多个的表达式。
re+匹配1个或多个的表达式。
re?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
re{ n}匹配n个前面表达式。例如,"o{2}"不能匹配"Bob"中的"o",但是能匹配"food"中的两个o。
re{ n,}精确匹配n个前面表达式。例如,"o{2,}"不能匹配"Bob"中的"o",但能匹配"foooood"中的所有o。"o{1,}"等价于"o+"。"o{0,}"则等价于"o*"。
re{ n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式


在python3中使用正则表达式首先需要import re库

import re

常用的re方法如下:

re.search() 最常用的查找方法,找到匹配的第一个字符串

match = re.search(r'[1-9]\d{5}', 'BIT 100081')
if match:
    print(match.group(0))

首先解释一下括号里面的内容,python中匹配是r'内容'格式,所以上面的正则表达式为[1-9]\d{5},第一位为1-9的数字,后面是5个数字的模式,比如123531,252522,但是第一位不能是0,012312就不可以匹配,最后使用group(0)打印出匹配的字符串.

所以匹配到内容100081



下面是re.match(),这个和search类似,不过只能从开头开始匹配

match = re.match(r'[1-9]\d{5}', 'BIT 100081')
if match:
    print(match.group(0))
#没有,因为不是从开始就能匹配

match = re.match(r'[1-9]\d{5}', '100081 BIT ')
if match:
    print(match.group(0))
#开头可以匹配

所以上面第一个从开头匹配数字,而内容第一个字符为'B',所以print没有内容,第二个为匹配到100081



re.findall()和search类似,只不过返回匹配到的所有内容

ls = re.findall(r'[1-9]\d{5}', '100081 BIT  TSU100084')
print(ls)

re.split()是用匹配的内容做分割

sp=re.split(r'[1-9]\d{5}', '100081 BIT  TSU100084')
print(sp)

sp=re.split(r'[1-9]\d{5}', '100081 BIT  TSU100084', maxsplit = 1)
print(sp)

上面匹配到内容,在匹配的内容处进行分割,同时这个函数也可以设置最大分割次数,到一定的分割次数以后就停止分割



re.sub是替换功能

sp=re.sub(r'[1-9]\d{5}', 'zipcode', '100081 BIT  TSU100084')
print(sp)


正则表达式可以使用面向对象的方法,需要使用re.compile函数,compile也同样可以使用search,match,findall等功能

regex = re.compile(r'[1-9]\d{5}')
regex.findall('100081 BIT  TSU100084')
#使用compile变成面向对象格式


最后要说的一点就是正则表达式的贪婪匹配,比如pyanbncn中匹配py.*n时是返回pyan还是pyanbncn呢?这里python采用贪婪匹配方法,也就是返回找到的最长的字符串,这里就是pyanbncn,如果想返回最短的字符串可以使用'?',变成py.*?n,这时便返回最小字符串了.



以上就是re库的基础内容了,把上面的基础知识掌握了,便可以更好的进行下一步的探索了.



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值