1、边界匹配
eg.判断一个账号是不是qq号。原则是,数字是4位到8位的,都认为是qq号。
#coding=utf-8
importre#qq号长度范围是4到8位
qq = "100000001"r= re.findall("^\d{4,8}",qq)print(r)#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test11.py"#['10000000']
分析:qq = "100000001"是10位,但是确实也能匹配到8个数字,但是其实这串数有十个,就不是个qq号,那这样就算误判了
怎么处理呢?
(1)加个逻辑,把匹配出来的字符串和qq比较,想等,则认为是qq,否则不是;太麻烦,不推荐
(2)加边界修饰符$
#coding=utf-8
importre#qq号长度范围是4到8位
qq = "100000001"r= re.findall("^\d{4,8}$",qq)print(r)#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test11.py"#[]
匹配出来是[],说明没有满足条件的字符
那么,想一下,为什么有这个效果。分析^\d{4,8}$这个正则表达式
^:从字符串开始的位置匹配,$:从字符串的末尾匹配,匹配的字符串是4到8位的;如果匹配不到,就[],如果能匹配到,就返回匹配字符串。
2、指定字符组合的重复;前面python{3},这种,只是指的n重复出现3次的匹配出来;要匹配pythonpythonpython中的python(字符组合)的3次匹配要怎么办?
用小括号给字符组括起来,表示是要讲这个字符组和匹配3次;(python){3}
结果有问题。。。。
#coding=utf-8
importre#qq号长度范围是4到8位
qq = "pythonpythonpythonpython"r= re.findall("(python){3}",qq)print(r)#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test11.py"#['python']
3、匹配模式
大小写:
re.findall('c#',a,re.I)的第三个参数
#coding=utf-8
importre
a= "C#|c#"r= re.findall('c#',a,re.I)print(r)#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test12.py"#['C#', 'c#']
多类匹配模式(大小写、空白字符)
#coding=utf-8
importre
a= "C#|c#\n"r= re.findall('c#.{1}',a,re.I|re.S)print(r)#[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test12.py"#['C#|', 'c#\n']
解析:.表示匹配除了\n 换行符,任意的字符,re.S 表示匹配空白字符(解析不一定对哦。。。瞎写的)