.findall() 直接匹配字母和数字
元字符:. ^ $ * + ? {} [] () \
import re
print(re.findall("alex","slfdlslalexgsj"))
>>>['alex']
. 表示代表两个任意字符
import re
print(re.findall("a..x","slfd123salexgsj"))
>>>['alex']
import re
print(re.findall("a..x","alexsdsadfxdlggsj"))
>>>['alex', 'adfx']
^ 表示从开头开始匹配
import re
print(re.findall("^a..x","alexsdsdlggsj"))
>>>['alex']
$ 匹配结尾的位置
import re
print(re.findall("a..x$","alexsdsadfxdafhx"))
>>>['afhx']
import re #不能匹配$符
print(re.findall("a..x$","alexsdsadfxdafhx$"))
>>>[]
* (0,+00) 匹配与前面的一个字符直到无穷次 没有的话匹配为“” 贪婪匹配
import re
print(re.findall("d*","aldddddddddfhx"))
>>>['', '', 'ddddddddd', '', '', '', '']
import re
print(re.findall("^d*","ddddddddhhshfhx"))
>>>['dddddddd']
print(re.findall("alex*","sodale"))
>>>['ale']
+(1,+00) 匹配与前面的一个字符直到无穷次 必须要有一个 贪婪匹配
import reprint(re.findall("alex+","sodalex"))
>>>['alex']
import re
print(re.findall("alex+","sodale"))
>>>[]
?(0,1) 最多匹配一个。
import re
print(re.findall("alex?","sfhalexxdj"))
print(re.findall("alex?","sfhaledj"))
>>>['alex']
>>>['ale']
{0,}==*
{1,}==+
{0,1}==?
{6}==只匹配6个
{1,6}==匹配1~6个
import re
print(re.findall("alex{0,3}","sfhalexxdj"))
print(re.findall("alex{3}","sfalexxledj"))
>>>['alexx']
>>>[]
? 变成惰性匹配
import re
print(re.findall("alex*?","sfhalexxdj"))
print(re.findall("alex+?","sfalexxledj"))
>>>['ale']
>>>['alex']
[] 或的意思 括号里面 都 单独 拿出来匹配 括号内至少要有一个 [-]表示a~z [^]表示非 [\]转意
import re
print(re.findall("www[oldboy baidu]","wwwbaidu"))
>>>['wwwb']
print(re.findall("q[a*z]","dfdfduqaa"))
>>>['qa']
print(re.findall("q[a-z]","dfdfqd13uq"))
>>>['qd']
print(re.findall("[^ads]","asda123123d"))
>>>['', '', '', '', '', '']
\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 匹配一个特殊字符边界,比如空格 ,&,#等
\ \\ \\\\
import re
ret=re.findall('c\l','abc\le')
print(ret)#[]
ret=re.findall('c\\l','abc\le')
print(ret)#[]
ret=re.findall('c\\\\l','abc\le')
print(ret)#['c\\l']
ret=re.findall(r'c\\l','abc\le')
print(ret)#['c\\l']
#-----------------------------eg2:
#之所以选择\b是因为\b在ASCII表中是有意义的
m = re.findall('\bblow', 'blow')
print(m)
m = re.findall(r'\bblow', 'blow')
print(m
1 gan = "\\"
2 print(gan)#\ python解释器中字符串\\,才表示一个\
3 print(re.findall("\\\\",gan)) #['\\'],其实就是一个\
| 或的意思 左边或者右边
import re
print(re.findall(r'ka|b','sdjkalbsf'))
>>>['ka', 'b']
() 先匹配元字符
print(re.findall(r'(abc)+','abcabc'))
>>>['abc']
.search() 取第一组数据 分组之后要保留后面组的数据
import re
s = re.search('(?P<name>\w+)(?P<name1>\d+)j','ssf51sf515jjk')
print(s.group())
>>>ssf51sf515j
print(s.group("name"))
>>>ssf51sf51
print(s.group("name1"))
>>>5
.match() 匹配开始的位置
print(re.match("\d+","454alexsd25d376d1df").group())
>>>454
.split()
print(re.split(" ","hello abc def"))
>>>['hello', 'abc', 'def']
print(re.split("[ |]","hello abc|def"))
>>>['hello', 'abc', 'def']
print(re.split("[ab]","asdabcd"))
>>>['', 'sd', '', 'cd']
.sub() 替换 可以写匹配次数
print(re.sub("\d+","A","lshl655sg5s5g3"))
>>>lshlAAAsgAsAgA
print(re.sub("\d+","A","lshl655sg5s5g3",2))
>>>lshlAsgAs5g3
.subn() 显示次数
print(re.subn("\d+","A","lshl655sg5s5g3"))
>>>('lshlAsgAsAgA', 4)
.compile() 把功能换成变量
import re
com=re.compile("\d+")
print(com.findall("ks23sd3gs5d"))
>>>['', '', '']
.finditer() 变成可迭代 的对象
import re
ret=re.finditer("\d","jjf561fg1515g")
print(next(ret).group())
print(next(ret).group())
>>>5
>>>6