python——re模块
python——re模块
一 正则表达式的作用
1、给字符串进行模糊匹配,
2、对象就是字符串
二 字符匹配(普通字符、元字符)
普通字符:数字字符和英文字母和自身匹配
2.元字符:. ^ $
* + ? {} [] () | \
re.方法("规则","匹配的字符串")
re.findall() 找到所有的匹配元素,返回一个列表
. 匹配任意一个字符,除了\n换行符
^ 从字符串开始匹配的位置
print(re.findall("a..c","abbc")) # ['abbc']
$ 从字符串结尾匹配
print(re.findall("alex$","yuanegonalex")) # ['alex']
* + ? {} :重复
* 匹配所有[0 -00] 0-无穷次
print(re.findall("ale*","yuanalexxxx")) # ['ale']
+ 匹配范围[1-oo] 1-无穷次
print(re.findall("alex+","yuanegongalex")) # ['alex']
? 匹配范围[0-1] 0-1次
print(re.findall("alex?","yuanegongalexxxx")) # ['alex']
{}万能的 范围自己定{0,无穷次}==* {1,无穷次}==+ {0,1次}==?
print(re.findall("alex{1,4}","yuanalexxxxxx")) # ['alexxxx']
() 分组
print(re.findall("(ad)+yuan","addddyuansdf")) # 空值[]
print(re.findall("(ad)+yuan","adadyuangfsdui"))#优先匹配(ad) # ['ad']
?:取消优先级
print(re.findall("(?:ad)+yuan","adadyuangfsdui")) # ?:取消优先级 # ['adadyuan']
print(re.findall("(\d)+yuan","adad678423yuang4234fsdui"))#默认最后一个数字 # ['3']
print(re.findall("(?:\d)+yuan","adad678423yuang4234fsdui")) #取消优先级 # ['678423yuan']
[] 字符集合设定符
1.或的功能 字符集里面特殊意义的 [-] [^] [\]
2.注意:* ,+ ,. 等元字符都是普通符号
print(re.findall('a[bc]d','acdabd')) #或的意思 # ['acd', 'abd']
print(re.findall('[a-z]','acd')) # ['a', 'c', 'd']
print(re.findall('[.*+]','a.cd+')) #把.和+匹配出来 # ['.', '+']
特殊意义的 [-] [^] [\]
print(re.findall('[1-9]','45dha3')) #取1至9的数字 # ['4', '5', '3']
print(re.findall('[^ab]','45bdha3'))#取ab以外的字母及数字 # ['4', '5', 'd', 'h', '3']
print(re.findall('[\d]','45bdha3'))#取所有的数字 # ['4', '5', '3']
\ 或的意思
print(re.findall("www\.(?:oldboy|baidu)\.com","www.oldboy.com")) # ['www.oldboy.com']
\ :转义
1 后面加一个元字符使其变成普通符号
2 将一些普通符号编程特殊符号 比如 \d \w
print(re.findall("\d+\*\d+","2*6+7*45+4*3-8/4")) #取出乘法 # ['2*6', '7*45', '4*3']
print(re.findall("\d+\.?\d*\*\d+\.?\d*","2*6+7*45+1.4*3-8/4")) #取出带有小数点的乘法 # ['2*6', '7*45', '1.4*3']
三 元字符之转义符\
反斜杠后边跟元字符去除特殊功能,比如\.
反斜杠后边跟普通字符实现特殊功能,比如\d
\d 匹配任何十进制数;它相当于类
[0-9]。
\D 匹配任何非数字字符;它相当于类
[^0-9]。
\s 匹配任何空白字符;它相当于类
[ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类
[^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类
[a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类
[^a-zA-Z0-9_]
\b 匹配一个特殊字符边界,比如空格 ,&,#等
四 正则表达式方法
re.findall() ---->列表 查找
re.finditer 可调用的迭代器 查找
s=re.finditer("\d+","ad324das32") print(s) print(next(s).group()) print(next(s).group()) # 324 # 32
search 只匹配第一个结果 查找
ret=re.search("\d+","djksf34asd3") print(ret.group()) # 34
match: 只在字符串开始的位置匹配 查找
ret=re.match("\d+","423dgssdf34dsfd3") print(ret.group()) # 423
split 分割
s2=re.split("\d+","fsd3445sdfdss54skf4533sd") print(s2) # ['fsd', 'sdfdss', 'skf', 'sd'] s2=re.split("\d+","fsd3445sdfdss54skf4533sd",2) #最大值分割 print(s2) # ['fsd', 'sdfdss', 'skf4533sd'] ret3=re.split("l","hello yuan") print(ret3) # ['he', '', 'o yuan']
sub 替换
ret4=re.sub("\d+","A","hello 234jkhh23") print(ret4) # hello AjkhhA ret4=re.sub("\d+","A","hello 234jkhh23",1) print(ret4) # hello Ajkhh23
compile :编译方法
c=re.compile("\d+") ret5=c.findall("hello32world53") #查找这些数字 print(ret5) # ['32', '53']