python-re模块学习-正则表达式

正则表达式基本匹配规则:
\d表示匹配一个数字
\s表示匹配一个空格或tab
\w表示匹配一个数字或字母
.表示匹配任意字符
*表示匹配任意个字符(包含0个)
+表示至少匹配一个字符
?表示匹配0个或1个字符
{n}表示匹配n个目标
{n,m}表示匹配n到m个目标
()表示分组匹配,比如有多个匹配规则
|表示或,表示可多选多个匹配规则
比如'(\w{1,10})@(qq|163|sina)(.com|.cn|.net)'就是一个简单的邮箱匹配规则

match,search,finditer,findall的区别
import re
s = 'sfsf,[email protected],[email protected],[email protected]'
b = re.search(r'(\w{1,10})@(qq|163|sina)(.com|.cn|.net)',s)
c = re.match(r'(\w{1,10})@(qq|163|sina)(.com|.cn|.net)',s)
d = re.findall(r'(\w{1,10})@(qq|163|sina)(.com|.cn|.net)',s)
e = re.finditer(r'(\w{1,10})@(qq|163|sina)(.com|.cn|.net)',s)

print(b)
print(c)
print(d)
print(e)

<re.Match object; span=(5, 19), match='[email protected]'>
None
[('22sdsd', 'sina', '.cn'), ('123', 'qq', '.com'), ('45ww6', '163', '.com')]
<callable_iterator object at 0x107b27750>

可以从上述代码中可以看出match、search、findall、finditer的区别
match会去匹配整个字符串中的值,如果有合适的值,则返回匹配到的第一个,如果匹配不到,则返回None
search会从字符串的第一个字符开始进行匹配,如果有合适的值,则返回匹配到的第一个,如果匹配不到,则返回None
findall则是会返回匹配到的所有值,会直接返回一个匹配值的列表
finditer一样是会返回匹配到的所有值,但是返回一个可迭代对象,可以通过循环再一个个取出对应的值

for i in e:
    print(i.group())

如果返回的是可迭代对象,可以用循环的办法重新获取对应的值
如果是返回的是match对象,可以使用group方法取出对应的值
注意到group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串,group

猜你喜欢

转载自www.cnblogs.com/yeyeyeyey/p/12115219.html
今日推荐