1.什么是正则表达式?
通俗解释:按照某个规则,从某个字符串中匹配出想要的数据。
官方解释:正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。
2.匹配单个字符(常用)
2.1 匹配某个字符串
匹配某个字符串,指定一个字符,如he
,从hello
中匹配
import re
text='hello'
ret = re.match('he',text)
print(ret.group())
打印结果:he
2.2 .
匹配任意的字符
import re
text = 'abcdrf'
ret = re.match('.',text)
print(ret.group())
打印结果:a
2.3 d
匹配任意的数字(0-9)
import re
text = '123'
ret = re.match('d',text)
print(ret.group())
打印结果:1
2.3 D
匹配任意的非数字(与d作用相反)
import re
text = 'abc'
ret = re.match('D',text)
print(ret.group())
打印结果:a
2.4 s
匹配空白字符( ,
,
,空格
)
import re
text = ' '
ret = re.match('s',text)
print(ord(ret.group()))
打印结果:9 (通过ASCII码表可以查到9就是制表符)
2.5 S
匹配非空白字符(与s作用相反)
import re
text = 'abc'
ret = re.match('S',text)
print(ord(ret.group()))
打印结果:a
2.6 w
匹配a-z
和A-Z
以及数字和下划线
import re
text = '_abc'
ret = re.match('w',text)
print(ret.group())
打印结果:_
2.7 W
(与w
作用相反)
import re
text = '#'
ret = re.match('W',text)
print(ret.group())
打印结果:#
2.8 []组合的方式,只要满足括号中的字符,则可匹配
import re
text = '0871-96532'
ret = re.match('[d-]+',text)
print(ret.group())
打印结果:0871-96532
3.匹配多个字符
3.1 使用[]
的形式代替d
import re
text = '0871-96532'
ret = re.match('[0-9]',text)
print(ret.group())
打印结果:0
3.2 使用[]
的形式代替w
import re
text = '_abc'
ret = re.match('[a-zA-Z0-9_]',text)
print(ret.group())
打印结果:_
3.3 使用[]
的形式代替w
import re
text = '#abc'
ret = re.match('[^a-zA-Z0-9_]',text)
print(ret.group())
打印结果:#
注意:以下的*,+,?依赖与他之前的规则,例如:
d+
表示匹配一个或者任意多个数字
3.4 *
可以匹配0或者任意多个字符
import re
text = '12345abc'
ret = re.match('d*',text)
print(ret.group())
打印结果:12345
与+号的区别在与当字符串为空的时候,*号不报错,但是+号会报错。
3.5 +
匹配1个或者多个字符
import re
text = '12345abc'
ret = re.match('d+',text)
print(ret.group())
打印结果:12345
3.6 匹配一个或者0个(要么没有,要么就只有一个)
import re
text = '12345abc'
ret = re.match('w?',text)
print(ret.group())
打印结果:1
3.7 {m,n}
匹配m到n个字符
此语法根据字符串的长度尽可能多的匹配
import re
text = '12345abc'
ret = re.match('w{1,5}',text)
print(ret.group())
打印结果:12345
4.实战案例
4.1 验证手机号
说明:此处假定手机号只有13,14,15,16,18等开头
import re
text = '18298377942'
ret = re.match('1[3,4,5,6,8]d{9}',text)
print(ret.group())
打印结果:18298377942
4.2 验证邮箱
import re
text = 'qin_ys@qq.com'
ret = re.match('w+@[a-zA-Z]+.[a-zA-Z]+',text)
print(ret.group())
打印结果:qin_ys@qq.com
4.3 验证网址
import re
text = 'https://www.baidu.com'
ret = re.match('(http|https|ftp)://[S]+',text)
print(ret.group())
4.4 验证身份证
import re
text = '53032219921008229x'
ret = re.match('d{17}[dxX]',text)
print(ret.group())