正则表达式可以从目标文本中快速查找,匹配,替换设置的模式,举个例子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)
上面匹配到内容,在匹配的内容处进行分割,同时这个函数也可以设置最大分割次数,到一定的分割次数以后就停止分割
![](https://i-blog.csdnimg.cn/blog_migrate/90afbaeac0291d18ebc91106def693fc.png)
re.sub是替换功能
sp=re.sub(r'[1-9]\d{5}', 'zipcode', '100081 BIT TSU100084')
print(sp)
![](https://i-blog.csdnimg.cn/blog_migrate/83fc5908dd2c2d86e2e0eb77436bb8f9.png)
正则表达式可以使用面向对象的方法,需要使用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库的基础内容了,把上面的基础知识掌握了,便可以更好的进行下一步的探索了.