最后
整理面试题,不是让大家去只刷面试题,而是熟悉目前实际面试中常见的考察方式和知识点,做到心中有数,也可以用来自查及完善知识体系。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
《前端基础面试题》,《前端校招面试题精编解析大全》,《前端面试题宝典》,《前端面试题:常用算法》
re.I(re.IGNORECASE)
: 忽略大小写(括号内是完整写法,下同)M(MULTILINE)
: 多行模式,改变’^
‘和’$
'的行为;S(DOTALL)
: 点任意匹配模式,改变’.'的行为;L(LOCALE)
: 使预定字符类\w \W \b \B \s \S
取决于当前区域设定;U(UNICODE)
: 使预定字符类\w \W \b \B \s \S \d \D
取决于unicode
定义的字符属性;X(VERBOSE)
: 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。
2.2 Match
Match
对象是一次匹配的结果,包含了很多关于此次匹配的信息,可以使用Match
提供的可读属性或方法来获取这些信息。
属性:
string
: 匹配时使用的文本。re
: 匹配时使用的Pattern对象。pos
: 文本中正则表达式开始搜索的索引。值与Pattern.match()
和Pattern.seach()
方法的同名参数相同。endpos
: 文本中正则表达式结束搜索的索引。值与Pattern.match()
和Pattern.seach()
方法的同名参数相同。lastindex
: 最后一个被捕获的分组在文本中的索引。如果没有被捕获的分组,将为None
。lastgroup
: 最后一个被捕获的分组的别名。如果这个分组没有别名或者没有被捕获的分组,将为None
。
方法:
三、group([group1, …])
获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group1可以使用编号也可以使用别名;编号0代表整个匹配的子串;不填写参数时,返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。
四、groups([default])
以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last)。default表示没有截获字符串的组以这个值替代,默认为None。
4.1 groupdict([default])
返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内。default含义同上。
五、start([group])
返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引)。group默认值为0。
六、end([group])
返回指定的组截获的子串在string中的结束索引(子串最后一个字符的索引+1)。group默认值为0。
七、span([group])
返回(start(group), end(group))
。
八、expand(template)
将匹配到的分组代入template
中然后返回。template
中可以使用\id或\g<id>
、 \g<name>
引用分组,但不能使用编号0。\id
与\g<id>
是等价的;但\10将被认为是第10个分组,如果你想表达 \1
之后是字符’0’,只能使用\g<1>0
。
九、pattern
Pattern对象是一个编译好的正则表达式,通过Pattern
提供的一系列方法可以对文本进行匹配查找。
Pattern
不能直接实例化,必须使用re.compile()
进行构造。
Pattern
提供了几个可读属性用于获取表达式的相关信息:
pattern
: 编译时用的表达式字符串。flags
: 编译时用的匹配模式。数字形式。groups
: 表达式中分组的数量。groupindex
: 以表达式中有别名的组的别名为键、以该组对应的编号为值的字典,没有别名的组不包含在内。
实例方法[ | re模块方法]:
9.1 match(string[, pos[, endpos]]) | re.match(pattern, string[, flags])
这个方法将从string的pos下标处起尝试匹配pattern;如果pattern结束时仍可匹配,则返回一个Match对象;如果匹配过程中pattern无法匹配,或者匹配未结束就已到达endpos,则返回None。
pos和endpos的默认值分别为0和len(string);re.match()无法指定这两个参数,参数flags用于编译pattern时指定匹配模式。
注意:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。想要完全匹配,可以在表达式末尾加上边界匹配符’$'。
9.2 search(string[, pos[, endpos]]) | re.search(pattern, string[, flags])
这个方法用于查找字符串中可以匹配成功的子串。从string的pos下标处起尝试匹配pattern,如果pattern结束时仍可匹配,则返回一个Match对象;若无法匹配,则将pos加1重新尝试匹配;直到pos=endpos
时仍无法匹配则返回None。 pos和endpos的默认值分别为0和len(string))
;re.search()
无法指定这两个参数,参数flags用于编译pattern时指定匹配模式。
9.3split(string[, maxsplit]) | re.split(pattern, string[, maxsplit])
按照能够匹配的子串将string
分割后返回列表。maxsplit
用于指定最大分割次数,不指定将全部分割。
9.4 findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags])
搜索string,以列表形式返回全部能匹配的子串。
9.5 finditer(string[, pos[, endpos]]) | re.finditer(pattern, string[, flags])
搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。
9.6 sub(repl, string[, count]) | re.sub(pattern, repl, string[, count])
使用repl
替换string
中每一个匹配的子串后返回替换后的字符串。 当repl
是一个字符串时,可以使用\id
或\g<id>
、\g<name>
引用分组,但不能使用编号0。 当repl
是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。 count
用于指定最多替换次数,不指定时全部替换。
9.7 subn(repl, string[, count]) |re.sub(pattern, repl, string[, count])
返回 (sub(repl, string[, count]), 替换次数)
。
十、re.match函数
re.match
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()
就返回none
。
函数语法:re.match(pattern, string, flags=0)
函数参数说明:
匹配成功re.match
方法返回一个匹配的对象,否则返回None
。
可以使用group(num)
或 groups()
匹配对象函数来获取匹配表达式。
10.1 实例 1
#!/usr/bin/python
# -\*- coding: UTF-8 -\*-
import re
print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配
print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配
以上实例运行输出结果为:
(0, 3)
None
10.2 实例 2
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.\*) are (.\*?) .\*', line, re.M|re.I)
if matchObj:
print ("matchObj.group() : ", matchObj.group())
print ("matchObj.group(1) : ", matchObj.group(1))
print ("matchObj.group(2) : ", matchObj.group(2))
else:
print ("No match!!")
以上实例执行结果如下:
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
十一、re.search方法
re.search
扫描整个字符串并返回第一个成功的匹配。
函数语法:re.search(pattern, string, flags=0)
函数参数说明:
匹配成功re.search
方法返回一个匹配的对象,否则返回None。
我们可以使用group(num)
或 groups()
匹配对象函数来获取匹配表达式。
11.1 实例一
import re
print(re.search("rlovep","rlovep.com").span())
print(re.search("com","http://rlovep.com").span())
11.2 实例二
import re
line = "This is my blog"
#匹配含有is的字符串
matchObj = re.search( r'(.\*) is (.\*?) .\*', line, re.M|re.I)
#使用了组输出:当group不带参数是将整个匹配成功的输出
#当带参数为1时匹配的是最外层左边包括的第一个括号,一次类推;
if matchObj:
print ("matchObj.group() : ", matchObj.group())#匹配整个
print ("matchObj.group(1) : ", matchObj.group(1))#匹配的第一个括号
print ("matchObj.group(2) : ", matchObj.group(2))#匹配的第二个括号
else:
print ("No match!!")
输出:
matchObj.group() : This is my blog
matchObj.group(1) : This
matchObj.group(2) : my
十二、search和match区别
re.match
只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None
;而re.search
匹配整个字符串,直到找到一个匹配。
12.1 实例
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs";
matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
print ("match --> matchObj.group() : ", matchObj.group())
else:
print ("No match!!")
matchObj = re.search( r'dogs', line, re.M|re.I)
if matchObj:
print ("search --> matchObj.group() : ", matchObj.group())
else:
print ("No match!!")
最后
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容
int ("search --> matchObj.group() : ", matchObj.group())
else:
print (“No match!!”)
### 最后
[外链图片转存中...(img-5lPUmZCJ-1715155589933)]
[外链图片转存中...(img-hQaw3tIi-1715155589933)]
>由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容
>
>**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**