正则表达式的常用匹配规则
1、匹配某个字符串
text = 'hellohello'
ret = re.match('he', text)
print(ret)
print(ret.group())
2、点(.)匹配任意的字符
text = 'hellohello'
ret = re.match('.', text)
print(ret.group())
3、但点号不能匹配换行符 \n
text = '\na'
ret = re.match('.', text)
print(ret.group())
4、\d 匹配任意的数字
text = '121311'
ret = re.match('\d', text)
print(ret.group())
5、\D 匹配任意的非数字
text = '+111'
ret = re.match('\D', text)
print(ret.group())
6、 \s 匹配空白字符串,\n \t \r
text = '\r1\n'
ret = re.match('\s', text)
print(ret.group())
7、 \w 匹配小写的a~z, A~Z, 数字和下划线
text = '__'
ret = re.match('\w', text)
print(ret.group())
8、 \W 和 \w匹配的相反
text = '----'
ret = re.match('\W', text)
print(ret.group())
9、[]只要满足中括号中的字符,就可以匹配.只要满足中括号中的一项既可
以匹配
text = '11aaa11'
ret = re.match('[1]', text)
print(ret.group())
text = '0371-119111'
# + 代表可以匹配一个或多个满足前边条件的
ret = re.match('[\d\-]+', text)
print(ret.group())
10、 中括号的形式代替\d
text = '11aaa11'
ret = re.match('[0-9]', text)
print(ret.group())
# \D == [^0-9]
# \w == [0-9a-zA-Z_]
# \W == [^0-9a-zA-Z_]
匹配多个字符串
1、* 可以匹配 0或者任意多个字符
text = '1aaaaa11'
ret = re.match('\d*', text)
print(ret.group())
#如果这里text = ‘aaa’
那么匹配0个,但不会报错
2、+ :匹配一个或者跟多个字符
text = 'aaaa11'
ret = re.match('\w+', text)
print(ret.group())
结果:aaaa11
3、?:匹配一个或者0个
text = 'aaaa11'
ret = re.match('\w*', text)
print(ret.group())
4、 {m}: 匹配m个字符
text = 'aaaa11'
ret = re.match('\w{2}', text)
print(ret.group())
结果: aa
5、{m,n}:匹配m到n个,如果有n个满足,就匹配n个。
若匹配地小于m,则会报错
text = 'a
aaa11'
ret = re.match('\w{1,3}', text)
print(ret.group())
正则表达式的常用匹配规则
1、^(脱字号):表示以…开始
text = 'hello'
ret = re.search('^h', text)
print(ret.group())
如果^在 中括号中,则表示取反操作
2、$ 代表以…结尾
text = 'wwwxxx@163.com'
ret = re.match('\w+@163.com$', text)
print(ret.group())
3、| 匹配多个表达式或者字符串
text = 'https://wwwxxx@163.com'
ret = re.match('(https|http)://\w+@163.com$', text)
print(ret.group())
4、贪婪模式和非贪婪模式
贪婪模式:匹配尽量多的字符 如 +
text = '013212313123123'
ret = re.match('\d+', text)
print(ret.group())
text = '<h1>测试</h1>'
ret = re.match('<.+>', text)
print(ret.group())
结果:<h1>测试</h1>
非贪婪模式:+?
text = '013212313123123'
ret = re.match('\d+?', text)
print(ret.group())
text = '<h1>测试</h1>'
ret = re.match('<.+?>', text)
print(ret.group())
结果
正则表达式的一些使用案例
1、验证手机号
text = '18511237719'
ret = re.match('1[34578]\d{9}', text)
print(ret.group())
2、验证邮箱
text = 'hywav11_@xx.com'
ret = re.match('\w+@[a-z0-9]+\.[a-z]{2,3}', text)
print(ret.group())
3、验证url
text = 'https://mp.csdn.net/mdeditor/103151639#'
ret = re.match('(http|https|ftp)://[^\s]+', text)
print(ret.group())
4、验证身份证
text = '11012345678965432x'
ret = re.match('\d{17}[\dxX]', text)
print(ret.group()
re模块常用函数
1、find_all
text = "apple's price $99,orange's price is $10"
ret = re.findall('\$\d+', text)
print(ret)
结果:['$99', '$10']
2、sub
text = "apple's price $99,orange's price is $10"
ret = re.sub('\$\d+', '0', text)
print(ret)
结果:apple's price 0,orange's price is 0
3、split
text = 'hello world ni hao'
ret = re.split(' ', text)
print(ret)
结果:['hello', 'world', 'ni', 'hao']
4、compile
对于一些倡常用的正则表达式,可以使用compile进行编译,后期再使用时可以直接拿过来使用,使用效率会更高。而且compile可以指定flag=re.VERBOSE,再写正则表达式时候可以做好注释
text = 'the number is 20.52'
# r = re.compile('\d+\.?\d*')
r = re.compile(r"""
\d+ #小数点前边的数字
\.? #小数点本身
\d* #小数点后边的数字
""", re.VERBOSE)