正则表达式
一、re模块
二、元字符
三、re的方法
正则:对字符串的模糊匹配
一、re模块
re.findall(规则,string) #findall找到所有的匹配元素,返回列表
二、元字符
元字符:有特殊功能的字符
. :通配符,可以匹配任意除换行符(\n)的字符
^ :从开始匹配
$ :从结尾匹配
表示重复:
* :[0,∞]
+ :[1,∞]
? :[0,1]
字符集:[]
[] :表示或者的关系,特殊符号放入[],成为普通符号,除符号: - ^ \ 特殊符号:* + .
[-] :表示范围
[^] :取反的意思
[] :还具备特殊意义
无命名分组:
() :分组,将括号中的字符作为小组匹配
(?😃 :取消分组特权
命名分组:
#命名分组
s6 = re.search(r'(?P<author>\w+)\.aticles\.(?P<id>\d{4})',"yuan.aticles.1234")
print(s6.group())
print(s6.group('id'))
print(s6.group('author'))
| :或
转义
\ :将特殊符号转换为普通符号. *,将部分普通符号转换为特殊符号\w \d
\w :任意字母和数字
\s :任意格式的空白空格
\b :匹配特殊字符边界
r:告诉python解释器不需要转义
python解释器正则\需要四个,即\\;或者加r,告诉python解释器不需要转义,两个,即\
贪婪匹配和非贪婪匹配
# 贪婪匹配:按照匹配最大的结果返回
print(re.findall("\d+","kj123jh45345jh345jh34j5"))
# 非贪婪匹配:按照匹配最小结果返回
print(re.findall("\d+?","kj123jh45345jh345jh34j5"))
三、re的方法
1.findall()
返回正则表达式在字符串中所有匹配结果的列表
2.finditer()
re.finditer() #匹配正则结果,返回迭代器
s = re.finditer('\d+','sd123fd1234ds12')
print(s)
print(next(s).group()) #获取结果
print(next(s).group())
3.search()
#只匹配第一结果就不匹配了,匹配成功返回一个对象,匹配不成功返回None
rec = re.search('\d+','sd123fd1234ds12')
print(rec)
print(rec.group()) #获取结果
4.match()
#只在字符串开始的时候匹配,匹配成功返回一个对象,匹配不成功返回None
rec = re.match('\d+','12sd123fd1234ds12')
print(rec)
print(rec.group()) #获取结果
5.split()
#按照正则规则分隔
s1=re.split('\d+','fsdf8098sdf809fg87',2) #2表示分隔次数
print(s1)
6.sub()
#替换
s2 = re.sub('\d+','A','hello 234jkhk234',1) #1表示替换次数
print(s2)
7.subn()
#替换补充,返回元组,返回替换次数
s3 = re.subn('\d+','A','hello 234jkhk234') #
print(s3)
8.compile()
#将正则规则实例化为对象,直接调用,方便多次字符串处理
s4 = re.compile('\d+')
s5 = s4.findall('hello123word123')