34.正则表达式
python正则表达式,使用re模块,模块中三个基础方法来做正则匹配。
match
re.match(匹配规则, 被匹配的字符串)
从字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空。
注意只会匹配开头,如果开头不匹配就直接返回None了。
import re
aa = "python is a good language, I am learning python"
res = re.match("python", aa)
# <_sre.SRE_Match object; span=(0, 6), match='python'>
print(res)
# (0, 6) 匹配到字符串的下标
print(res.span())
# python
print(res.group())
bb = "1python is a good language, I am learning python"
ress = re.match("python", bb)
# None match方法只是匹配开头,如果一开始就不匹配就直接返回None,不会继续后续匹配
print(ress)
search
搜索整个字符串,找出匹配的。找到第一个后就停止,不会继续向后。
整个字符串都找不到,返回None。
import re
aa = "java is a good language, I am learning python"
res = re.search("python", aa)
# <_sre.SRE_Match object; span=(39, 45), match='python'>
print(res)
# (39, 45)
print(res.span())
# python
print(res.group())
findall
匹配整个字符串,找出全部匹配项。
找不到就会返回一个[] 空list。
import re
aa = "python is a good language, I am learning python"
res = re.findall("python", aa)
# ['python', 'python']
print(res)
元字符匹配
import re
aa = "tallor@@python2!!666##itaa3"
# 字符串r标记,表示当前字符串是原始字符串,即内部的转义字符无效,而是普通字符
res = re.findall(r'\d', aa)
# ['2', '6', '6', '6', '3']
print(res)
# 找出所有的特殊字符
res = re.findall(r'\W', aa)
# ['@', '@', '!', '!', '#', '#']
print(res)
# 找出所有的字母
res = re.findall(r'[a-zA-Z]', aa)
# ['t', 'a', 'l', 'l', 'o', 'r', 'p', 'y', 't', 'h', 'o', 'n', 'i', 't', 'a', 'a']
print(res)
案例:匹配只能有数字和字母组成,长度限制6-10位
import re
r = "^[0-9a-zA-Z]{6,10}$"
s = '123456'
# ['123456']
print(re.findall(r, s))
这里特别注意:r 正则表达式不能有空格。不然匹配会失败。
案例:匹配qq号,要求纯数字,长度5-11,第一位不为0
import re
r = "^[1-9]\d{4,10}$"
s = '123456'
# ['123456']
print(re.findall(r, s))
案例:邮箱验证
import re
r = "^([\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+)$"
s = 'aa@qq.comx'
# [('aa@qq.comx', '', 'qq', '.comx')]
print(re.findall(r, s))