import re
print(re.findall('\w9\w','axsdas9xas,_9xdsas_91'))
#\w,字母数字下划线,中间的必须为9
print(re.findall('\W','wgks++++=10==100'))
#\W,非字母数字下划线,和\w 相反
print(re.findall('\s',' wangk ai aksds '))
#匹配空格
print(re.findall('\S',' wangk ai aksds '))
#匹配非空格
print(re.findall('\d',' 232312 a432i4 a6k65sds '))
#匹配数字
print(re.findall('\D', 'wangk 4556 ai34 aksadsds' ))
#匹配非数字
print(re.findall('\n', 'wangk 4556 ai34 \n aksadsds' ))
#匹配换行符
print(re.findall('\t', 'wangk 4556 ai34 \t aksadsds' ))
#匹配制表符
print(re.findall('^wang', 'wang 4556 ai34 \t aksadsds' ))
#仅匹配字符串的开头
print(re.findall('$wang', 'wang 4556 ai34 \t aksadsds' ))
#仅匹配字符串的开头
print(re.findall('.', 'wang 4556 ai3\n aksadsds' ))
#匹配任意字符,除换行符
print(re.findall('a.g', 'wang 4556 ai3\n aksadsds',re.DOTALL ))
#匹配a和g中含任意字符
print(re.findall('a[n]g', 'wang 4556 ai3\n aksadsds',re.DOTALL ))
#匹配a和g中含n
print(re.findall('a[1-9]g', 'wang 4556 ai3\n aksaa9gdsds',re.DOTALL ))
#匹配a和g中含1-9的数字
print(re.findall('a[^1-9]g', 'wang 4556 ai3\n aksaa9gdsds',re.DOTALL ))
#匹配除了a和g中含1-9的数字
print(re.findall('a[a-zA-Z]g', 'wang 4556 ai3\n aksaa9gdsds',re.DOTALL ))
#匹配a和g中大小写字母
print(re.findall('a[=+*/-]g', 'wang 4556 ai3\n aksaa-gdsds',re.DOTALL ))
#匹配a和g且包括[]内的
print(re.findall('a[=+*\-/]g', 'wang 4556 ai3\n aksaa-gdsds',re.DOTALL ))
#匹配a和g中加减乘除,但是减号要放到两边,或者-号前面加上转义符\
print(re.findall('ag', 'wag aG Ag 4556 ai3\n aksadsds',re.I ))
#re.I,匹配大小写
print(re.findall('m\\\\e','m\e')) #\的用法,一个\转义一个\
print(re.findall(r'm\\q','m\q'))
#打印出来的结果多一个\,自动添加转义符
sub
s = 'wang##kai##aksds@@$$$'
print(re.sub('[!#?]','',s))
#重复匹配
?: 代表?左边的字符出现0次到一次
print(re.findall('ab?','a ab abb abbb a1bb abbbbbb'))
#只取a0个b到a1个b
*: 代表*左边的字符出现0次到无数次# print(re.findall('ab*','a ab abb abbb a1bb abbbbbb'))
#取a0个b到a无数个b
+:代表+左边的字符出现1次到无穷次# print(re.findall('ab+','a ab abb abbb a1bb abbbbbb')) 取a1个b到a无数个b
{n,m}:代表{n,m}左边的字符出现n次到m次print(re.findall('ab{1,3}','a ab abb abbb a1bb abbbbbb')) #取a(n个b)到a(m个b)
print(re.findall('ab{1,}','a ab abb abbb a1bb abbbbbb'))
#取a(n个b)到a(无穷个b)
print(re.findall('ab{0,1}','a ab abb abbb a1bb abbbbbb'))
#取a(0个b)到a(1个b)
print(re.findall('ab{,}','a ab abb abbb a1bb abbbbbb'))
#取a(0个b)到a(无穷个b)
#贪婪匹配 .*
print(re.findall('a.*b','a ab abb abbb a1bb abbbbbb'))
#取a到最远的b的所有值
#非贪婪匹配 .*?
print(re.findall('a.*?b','a ab abb abbb a1bb abbbbbb'))
#取a到最近的b的所有值
#|:或者
print(re.findall('companies|company','Too many companies have gone bankrupt,c and the next one is my company'))
#取companies或company的所有值
#():分组
# print(re.findall('compan(ies|y)','Too many companies have gone bankrupt,c and the next one is my company'))
#compan依然是判断条件,但是只取括号里面的值,
print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt,c and the next one is my company'))
#compan依然是判断条件,但是取所有参与判断的值,
print(re.findall('href="(.*?)"','<p>动感视频</p><a href="https://www.douniwan.com/1.mp4">逗你玩呢</a><a href="https://www.xxx.com/2.mp4">葫芦娃</a>'))
#非贪婪匹配,只取括号的值
print(re.findall('href="(.*)"','<p>动感视频</p><a href="https://www.douniwan.com/1.mp4">逗你玩呢</a><a href="https://www.xxx.com/2.mp4">葫芦娃</a>'))
#贪婪匹配,取匹配成功的第一个到最后一个其间所有的值
res=re.search('(href)="(.*?)"','<p>动感视频</p><a href="https://www.douniwan.com/1.mp4">逗你玩呢</a><a href="https://www.xxx.com/2.mp4">葫芦娃</a>')
print(res) #search不产生直接的值,相当于一个生成器,需要用group再次调用
print(res.group(0)) #0代表所有
print(res.group(1)) #1代表分组第一个,第一个括号里的内容
print(res.group(2)) #2代表分组第2个,第二个括号里的内容,索引超过范围会报错
res=re.match('abc','123abc') 等介于 res=re.search('^abc','123abc')
print(res) #match代表只从开头查找,相当于findall中的(^)
re.search & re.match
两者都是寻找第一个匹配成功的值,成功则返回一个 match 对象,不成功则返回 None 。不同之处在于 re.match只匹配字符串开头的部分,而 re.search 匹配的则是整个字符串中的字串。
re.findall & re.finditer
re.findall 返回所有匹配成功的对象, re.finditer 返回的是一个迭代器
#re.sub 将匹配的内容进行替换
#re.compile 生成一个pattern 对象,这个对象有匹配,替换,分割字符串的方法
#逃逸字符 \\\\
print(re.findall('alex','alex is alex is alex')) #匹配模式
print(re.search('alex','alex is alex is alex')) #查找模式
##search不产生直接的值,需要用group(数字)再次调用其对应的值
print(re.match('alex','alex is alex is alex')) #匹配开头模式
#match代表只从开头查找,相当于findall中的(^)上括号