.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) 匹配与前面的一个字符直到无穷次 没有的话匹配为“” 贪婪匹配
1 import re 2 print(re.findall("d*","aldddddddddfhx")) 3 >>>['', '', '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'] >>>[]
? 变成惰性匹配
1 import re 2 print(re.findall("alex*?","sfhalexxdj")) 3 print(re.findall("alex+?","sfalexxledj")) 4 >>>['ale'] 5 >>>['alex']
[] 或的意思 括号里面 都 单独 拿出来匹配 括号内至少要有一个 [-]表示a~z [^]表示非 []转意
1 import re 2 print(re.findall("www[oldboy baidu]","wwwbaidu")) 3 >>>['wwwb'] 4 print(re.findall("q[a*z]","dfdfduqaa")) 5 >>>['qa'] 6 print(re.findall("q[a-z]","dfdfqd13uq")) 7 >>>['qd'] 8 print(re.findall("[^ads]","asda123123d")) 9 >>>['1', '2', '3', '1', '2', '3']
d 匹配任何十进制数;它相当于类 [0-9]。
D 匹配任何非数字字符;它相当于类 [^0-9]。
s 匹配任何空白字符;它相当于类 [
fv]。
S 匹配任何非空白字符;它相当于类 [^
fv]。
w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
匹配一个特殊字符边界,比如空格 ,&,#等
\ \\
1 import re 2 ret=re.findall('cl','abcle') 3 print(ret)#[] 4 ret=re.findall('c\l','abcle') 5 print(ret)#[] 6 ret=re.findall('c\\l','abcle') 7 print(ret)#['c\l'] 8 ret=re.findall(r'c\l','abcle') 9 print(ret)#['c\l'] 10 #-----------------------------eg2: 11 #之所以选择是因为在ASCII表中是有意义的 12 m = re.findall('blow', 'blow') 13 print(m) 14 m = re.findall(r'blow', 'blow') 15 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() 取第一组数据 分组之后要保留后面组的数据
1 import re 2 s = re.search('(?P<name>w+)(?P<name1>d+)j','ssf51sf515jjk') 3 print(s.group()) 4 >>>ssf51sf515j 5 print(s.group("name")) 6 >>>ssf51sf51 7 print(s.group("name1")) 8 >>>5
.match() 匹配开始的位置
print(re.match("d+","454alexsd25d376d1df").group()) >>>454
.split()
1 print(re.split(" ","hello abc def")) 2 >>>['hello', 'abc', 'def'] 3 print(re.split("[ |]","hello abc|def")) 4 >>>['hello', 'abc', 'def'] 5 print(re.split("[ab]","asdabcd")) 6 >>>['', '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")) >>>['23', '3', '5']
.finditer() 变成可迭代 的对象
import re ret=re.finditer("d","jjf561fg1515g") print(next(ret).group()) print(next(ret).group()) >>>5 >>>6