通配符".":代表任意一个字符,换行符不算.
“^”:字符串开头匹配
“$”:字符串结尾匹配
“*”:匹配0至无穷次(贪婪匹配)
“+”:匹配1至无穷次(贪婪匹配)
“?”:匹配0次至1次
{0,} == *
{1,} == +
{0,1} == ?
{6} 匹配6次(精准匹配)
{1,5} 匹配1-5次(贪婪匹配)
前面的*,+,?等都是贪婪匹配,后面加?变成惰性匹配,按最小次数匹配
字符集[ ]:
q[a-z]匹配q和a-z中的任意一个
q[a-z]*匹配q和a-z中的最长次数
q[^a-z]不是a-z的都匹配上
q[]
\ 转义,让普通字符变得有意义,让有意义的字符变成普通字符
\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(r’I\b’,‘I am boy’),找出全部并把结果放在列表,这里面的r表示字符串是原生字符串,不含解释器的转义
| 管道符,表示"或"
(?P < name >\w+),括号()表示分组,?P表示给分组匹配结果命名,用于.group(“name”)
(?:)表示取消组的显示优先级
默认组的显示优先级最高,每次匹配都会把每个组的结果显示出来
import re
ret = re.findall('(\d{2})|(\w{3})','24ggdcom') #默认组的显示优先级最高,每次匹配都会把每个组的结果显示出来
print(ret)
输出:
[(‘24’, ‘’), (’’, ‘ggd’), (’’, ‘com’)]
re.search(’\d+’,‘slgdsg23kl4l34’).group(),
该方法,表示只找第一个匹配的结果,得到的结果需要加.group()
re.match(’\d+’,‘slgdsg23kl4l34’).group()只会从字符串开始匹配结果,得到的结果需要加.group()
re.split(" “,“hello abc ade”)用空格” "分割字符串,得到的结果是列表
re.split(’[a,b]’,“hello abc ade”),先将字符串按照a分割,再将结果按照b分割
re.sub(’[^\w]+’,’ ‘,l,4)将字符串l的[^\w]部分用’ '替换4次
l = '23421s\s4lkf s@ adlgn a;sfwlkqn v'
print(re.sub('[^\w]+',' ',l,4))
输出:
23421s s4lkf s adlgn a;sfwlkqn v
re.subn(’ [^\w ]+’,‘s’,l将字符串l的[^\w]部分用’s’替换并统计替换次数,得到一个元祖
l = '23421s\s4lkf s@ adlgn a;sfwlkqn v'
print(re.subn('[^\w]+','s',l))
输出:
(‘23421sss4lkfsssadlgnsassfwlkqnsv’, 6)
re.compile()制定表达式规则,可重复利用
import re
l = '23421s\s4lkf s@ adlgn a;sfwlkqn v'
com = re.compile('[^\w]+')
print(com.subn(' ',l))
re.finditer("\d",“sfdagew342rtfd5dsf”),找出全部匹配结果,组成一个迭代器,用next()获得结果是一个match对象,需要用.group()获得结果
import re
l = '23421s\s4lkf s@ adlgn a;sfwlkqn v'
ret = re.finditer('\d',l)
print(ret)
print(ret.__next__().group())
print(next(ret).group())
输出:
<callable_iterator object at 0x000000D24EC84F98>
2
3
()分组里面前端加?:表示取消()括号的优先级,不加表示优先取括号内的内容
import re
l = '23421s\swww.baidu.com4lkf v'
ret = re.findall('www\.(?:baidu|163).com',l)
print(ret)