一,概述
正则表达式全称是 Regular Expression, 是用来校验和匹配数据,下面就来教你怎么看懂别人所写的正则表达式。
二,正则表达式的使用步骤
1,导包
import re
2,正则校验的三个方法
re.match(正则表达式,要匹配的内容(str),要被匹配的内容(flag)) 对要被匹配的内容,从左到右全部匹配,错一个都不行。
re.search((正则表达式,要匹配的内容(str),要被匹配的内容(flag)) 对要被匹配的内容,从左到右开始,只要能匹配上就行,不用全部匹配。
re.sub(正则表达式, 用来替换的内容, 要被替换的内容),这是正则替换。
3,获取匹配结果
result = re.group()
三,正则规则
下面是一些常见到的正则规则讲解:
(1). 表示任意的一个字符(除了\n)
(2)\. 表示取消上述.的本身含义,即只把它看做一个点来使用,比如校验邮箱里所含有的qq.com中的点。
(3)[abc] 表示abc中任意一个字符
(4)[^abc] 表示除了abc中任意一个字符
(5)\d 表示所有的数字,等价于[0-9]
(6) \D 表示所有的非数字,等价于[^0-9]
(7) \s 表示空白字符,比如空格,\t,\n等等
(8)\S 表示非空白字符,除了上述\s那些
(9) \w 表示非特殊字符,包括(字母,数字,下划线(_),汉字)
(10) \W 表示特殊字符,除了上述\w那些
下面对这些正则规则做一个代码解释,用re.match匹配规则,方便理解。
#导包
import re
(1).的用法
#匹配演示:
result = re.match('lufei.','lufeig') #匹配,结果是lufeig
#未匹配演示:
result = re.match('lufei.','l ufeig') #未匹配
(2)\.的用法
#匹配演示:
result = re.match('lufei\.qq\.com','lufei.qq.com') #匹配,结果是lufei.qq.com
#(3)[abc]的用法
#匹配演示:
result = re.match('[lufei].*','fsnx') #匹配,结果是fsnx。.*的意思是后面可以跟多个任意字符
#未匹配演示:
result = re.match('[lufei].*','snx.') #未匹配
#(4)[^abc]的用法
#匹配演示:
result = re.match('[^lufei].*','afsnx') #匹配,结果是afsnx。
#未匹配演示:
result = re.match('[^lufei].*','lsnx.') #未匹配
#(5)\d的用法
#匹配演示:
result = re.match('\d.*','6afsnx') #匹配,结果是6afsnx。
#未匹配演示:
result = re.match('\d.*','lsnx.') #未匹配
#(6)\D的用法
#匹配演示:
result = re.match('\D.*','afsnx') #匹配,结果是afsnx。
#未匹配演示:
result = re.match('\D.*','7lsnx.') #未匹配
#(7)\s的用法
#匹配演示:
result = re.match('\s.*','\t6afsnx') #匹配,结果是 6afsnx,前面有个空格哦。
#未匹配演示:
result = re.match('\s.*','lsnx.') #未匹配
#(8)\S的用法
#匹配演示:
result = re.match('\S.*','afsnx') #匹配,结果是afsnx。
#未匹配演示:
result = re.match('\S.*','\n7lsnx.') #未匹配
#(9)\w的用法
#匹配演示:
result = re.match('\w.*','6afsnx') #匹配,结果是 6afsnx
#未匹配演示:
result = re.match('\w.*','!lsnx.') #未匹配
#(10)\W的用法
#匹配演示:
result = re.match('\W.*','$afsnx') #匹配,结果是$afsnx。
#未匹配演示:
result = re.match('\W.*','7lsnx.') #未匹配
if result:
rs = result.group()
print(f'匹配到: {rs}')
else:
print('未匹配!')
(11) ? 表示要匹配的内容在要被匹配的内容里至少出现0次至多1次
(12) * 表示出现至少0次,至多n次
(13)+ 表示出现1次,至多n次
(14){n} 表示恰好出现n次
(15){n,} 表示至少出现n次
(16){n,m} 表示至少出现n次至多出现m次
(17)^ 表示以什么开头
(18)$ 表示以什么结尾
代码解释:
#导包
import re
#(11)?的用法
#匹配演示:
result = re.match('a?.*','afsnx') #匹配,结果是afsnx。
#未匹配演示:
result = re.match('ab.?', 'a bk') #未匹配
#(12)*的用法
#匹配演示:
result = re.match('a*','aaaafsnx') #匹配,结果是aaaa。
#未匹配演示:
result = re.match('a.*', 'bbbk') #未匹配
#(13)+的用法
#匹配演示:
result = re.match('a+','aafsnx') #匹配,结果是aa。
#未匹配演示:
result = re.match('a.+', 'bbbk') #未匹配
#(14){n}的用法
#匹配演示:
result = re.match('a{2}','aafsnx') #匹配,结果是aa。
#未匹配演示:
result = re.match('a.{2}', 'bbbk') #未匹配
#(15){n,}的用法
#匹配演示:
result = re.match('a{2,}','aaaafsnx') #匹配,结果是aaaa。
#未匹配演示:
result = re.match('a{2,}', 'abbbk') #未匹配
#(16){n,m}的用法
#匹配演示:
result = re.match('a{2,5}','aaaafsnx') #匹配,结果是aaaa。
#未匹配演示:
result = re.match('a{2,5}', 'abbbk') #未匹配
#(17)^的用法
#匹配演示:
result = re.match('^abf.*','abfsnx') #匹配,结果是abfsnx。
#未匹配演示:
result = re.match('^abf.*', 'abbbk') #未匹配
#(18)$的用法
#匹配演示:
result = re.match('.*abf$','snxabf') #匹配,结果是abfsnx。
#未匹配演示:
result = re.match('.*abf$', 'abbab') #未匹配
if result:
rs = result.group()
print(f'匹配到: {rs}')
else:
print('未匹配!')
(19)| 表示或者的意思
#导包
import re
# 定义列表, 记录动物.
animals = ['dog', 'cat','bird','panda']
# 遍历, 获取到每一个动物.
for value in animals:
result = re.match('dog|panda', value)
# 打印结果.
if result:
print(f'喜欢的动物: {result.group()}')
else:
print(f'不喜欢的动物: {value}')
(20)()表示分组
import re
# 需求: 从 随便一个网址中 提取出http和com
result = re.match('(http)://[a-z].*\.(.*)', 'http://sjhduib.com')
if result:
print(f'group(), {result.group()}') # 结果为: http://sjhduib.com
print(f'group(0), {result.group(0)}') # 结果为: http://sjhduib.com
print(f'group(1), {result.group(1)}') # 结果为: http
print(f'group(2), {result.group(2)}') # 结果为: com
else:
print('未匹配到!')
可以跟着敲一敲代码,会方便理解这些正则规则,希望可以帮到你哦。