正则表达式:就是用来筛选字符串中特定内容的一串具有某种逻辑规则的字符组成。正则表达式不是Python独有的,而是一门独立的技术,它在所有的编程语言中都有使用,在Python中使用就必须依赖于re模块。正则的应用场景:比如,爬虫,数据分析。
正则的使用某些特定逻辑的字符构造的代码,可以简化我们的代码的冗余。看以下二图,请做比较。
正则表达式匹配字符串规则:
字符组 [ ] 一个字符串里面的表达式都是或的关系
[0-9] 表示匹配0~9的数字,中括号内部数字之间是或的关系,只要有一个数字能对应到0~9的任意一个数字都认为匹配成功。也可以写成[0123456789]的形式
[a-z] 匹配小写字母
[A-Z]匹配大写字母
[0-9a-fA-F] 可以匹配数字大小写形式的a-f,用来验证十六进制字符
元字符:
^与$连用,能实现精准的匹配,^与$之间是什么内容,匹配的内容就必须写什么内容;比如,^ab$,则待匹配的内容也必须是ab
^[和],表示第一个字符是以‘和’开头的;[^和]表示除了括号内的任意字符串
abc|ab 一定要将长的正则放在|前面短的放在后面,不然两个字符串极尽相似,长的字符串在后面被前面短的字符串匹配成功一部分,就相当于把长字符串切成了两部分,匹配不上的舍弃掉了,后面长的就匹配不上了。
正则在匹配的时候默认都是贪婪匹配(尽量匹配多的),你可以通过在量词后面加上一个?就可以将贪婪匹配变成非贪婪匹配(惰性匹配)
量词必须跟在正则符号的后面,量词只能能够限制紧挨着它的那一个正则符号
分组:当多个正则符号需要重复多次的时候或者当做一个整体进行其他操作,那么可以分组的形式,分组在正则的语法中就是使用小括号()
正则事例:
re模块下的常用方法:
python使用正则必须借助于re模块 或者是支持正则表达式书写的方法
import re(使用re模块,首先先导入)
re模块下内置的方法:
re.findall(打印直接取值)
re.search (有匹配的结果时,返回的是一个对象,还需调用.group()才能取值)
re.match(同search)
split
sub
subn
compile
finditer
1), re.findall 表达式为: findall('正则表达式','带匹配的字符串') 找出字符串中符合正则表达式全部内容 并且返回的是一个列表,列表中的元素就是正则匹配到的结果。
2),re.search 表达式为: search('正则表达式','带匹配的字符串'), 如果对象存在,不会给你直接返回匹配到的结果 ,而是给你返回一个对象,必须调用group才能看到匹配到的结果。如果匹配不到,返回none, 调用group直接报错。search只会依据正则查一次 只要查到了结果 就不会再往后查找。
3), match
1.match只会匹配字符串的开头部分
2.当字符串的开头不符合匹配规则的情况下 返回的也是None 调用group也会报错
split 在re下的split表示切除的意思,切除之后生成的是一个列表
sub(能用正则将字符串中的数字替换掉,返回一整个字符串) sub的表达式re.sub('正则表达式','新的内容','待替换的字符串',n),n代表要替换字符串中数字的个数
subn 返回的是一个元组 元组的第二个元素代表的是替换的个数
compile
re.compile 下再调用findall,结果生成按我们指定的只能重复三个数字,切分成列表。
finditer (就是一个迭代器) re.finditer('正则’,‘字符串’).__next__.group(),当取出所有值,就会报错
还可以给某一个正则表达式起别名
在Python里的分组,与正则无关。这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可。