一、正则化表达式作用
\qquad 1、判断某一数据是否负责规则;
\qquad 2、获取符合特定规则的数据。
二、正则化表达式使用及代码
\qquad 1、match的用法
\qquad匹配以什么开头的字符串
import re
re.match("速度与激情","速度与激情8")
\qquad上述代码运行后的到一个返回值,则说明字符串是以我设定的规则开头的,若无返回值,则字符串你不是以我设定的规则开头的。如果需要获取符合我设定规则的数据,通过group获取。代码如下:
import re
ret = re.match(r"速度与激情","速度与激情8")
a = ret.group()
print(a)
\qquad上述代码运行后打印出“速度与激情”。
\qquad匹配单个字符
| 字符 | 功能 |
|---|---|
| . | 匹配任意一个字符(\n除外) |
| [ ] | 匹配[ ]列举的字符 |
| \d | 匹配一位数的数字,0~9 |
| \D | 匹配非数字 |
| \s | 匹配空白,如空格、tab键 |
| \S | 匹配非空白 |
| \w | 匹配单词字符,即az,AZ,0~9,_,各种语言文字(例如中文汉字) |
| \W | 匹配非单词字符 |
import re
ret1 = re.match(r"速度与激情\d","速度与激情8")
a1 = ret1.group()
ret2 = re.match(rrr"速度与激情[12345678]","速度与激情8")
a2 = ret2.group()
ret3 = re.match(rr"速度与激情[1-8]","速度与激情8")
a3 = ret3.group()
ret4 = re.match(rr"速度与激情[1-36-8]","速度与激情8")
a4 = ret4.group()
ret5 = re.match(r"速度与激情.","速度与激情8")
a5 = ret5.group()
ret6 = re.match(r"速度与激情.","速度与激情a")
a6 = ret6.group()
ret7 = re.match(r"速度与激情.","速度与激情_")
a7 = ret7.group()
\qquad匹配多个字符
| 字符 | 功能 |
|---|---|
| * | 匹配前一个字符出现0次或者无限次,即可有可无 |
| + | 匹配前一个字符出现1次或者无限次,即至少出现1次 |
| ? | 匹配前一个字符出现0次或者出现1次,即最多出现1次 |
| {m} | 匹配前一个字符要出现m次 |
| {m,n} | 匹配前一个字符出现的次数可以在m到n之间 |
import re
#1
rat1 = re.match(r"速度与激情\d*","速度与激情")
a1 = rat1.group()
#2
rat2 = re.match(r"速度与激情\d*","速度与激情1")
a2 = rat2.group()
#3
rat3 = re.match(r"速度与激情\d*","速度与激情1111122")
a3 = rat3.group()
#4
rat4 = re.match(r"速度与激情\d+","速度与激情")
a4 = rat4.group()
#5
rat5 = re.match(r"速度与激情\d+","速度与激情1")
a5 = rat5.group()
#6
rat6 = re.match(r"速度与激情\d+","速度与激情111222")
a6 = rat6.group()
#7
rat7 = re.match(r"速度与激情\d?","速度与激情")
a7 = rat7.group()
#8
rat8 = re.match(r"速度与激情\d?","速度与激情1")
a8 = rat8.group()
#9
rat9 = re.match(r"速度与激情\d{2}","速度与激情11")
a9 = rat9.group()
#10
rat9 = re.match(r"速度与激情\d{2,3}","速度与激情111")
a9 = rat9.group()
\qquad其他符号
| 符号 | 功能 |
|---|---|
| ^ | 从字符串的开头开始匹配,match函数默认从头开始匹配 |
| $ | 字符串必须以前一个字符结尾 |
| | | 匹配左右任意一个表达式 |
| (ab) | 将括号中的字符作为一个分组 |
| \num | 引用分组num匹配到的字符 |
| (?P<name>) | 分组起别名 |
| (?P=name) | 引用别名为name的分组匹配到的字符 |
import re
#必须以数字结尾
re.match(r"速度与激情\d$","速度与激情a")
re.match(r"速度与激情\d$","速度与激情1")
#分别取出字符串”速度与激情22aa"中的数字和小写字母
re.match(r"速度与激情(\d*)([a-z]*)","速度与激情22aa").group(1)
re.match(r"速度与激情(\d*)([a-z]*)","速度与激情22aa").group(2)
re.match(r"速度与激情(?P<num>\d*)(?P<str>[a-z]*)","速度与激情22aa").group(1)
#判断字符串是否对称
re.match(r"(\w){1}a{1}\1","1a1").group()
re.match(r"(?P<num>\w){1}a{1}(?P=num)","1a1").group()
$\qquad$2、正则化表达式的其他高级用法
\qquadsearch从左往右搜索到第一个符合条件的字符至不再符合条件的字符。
import re
#取出字符串中的数字
re.search(r"\d+","阅读量:1110,点赞数:12332").group()
\qquad上述代码运行后返回值为’1110’,可见search只能找出从左往右第一个符合条件的字符,直到条件符合结束。
\qquadfindall查找所有符合条件的字符
import re
#取出字符串中的所有数字
re.findall(r"\d+","阅读量:1110,点赞数:12332")
\qquad上述代码运行后得到的返回值是[‘1110’,‘1232’],说明findall能够查询所有符合条件的字符。
\qquadsub替换匹配的字符
import re
#代码1
re.sub(r"\d+","10000","阅读量:1110")
#代码2
re.sub(r"\d+","10000","阅读量:1110,点赞数:12332")
#代码3
def add(temp):
num = int(temp.group())+1
str1=str(num)
return str1
re.sub(r"\d+",add,"阅读量:1110")
\qquad代码1运行的结果是 ‘阅读量:10000’,代码2运行的结果是 ‘阅读量:10000,点赞数:10000’,代码3运行的结果是 ‘阅读量:1111’
\qquadspilt根据匹配进行切割字符串,并返回一个列表
import re
re.split(r":| ","阅读量:1110 点赞数:11111")
\qquad上述代码运行的结果 [‘阅读量’, ‘1110’, ‘点赞数’, ‘11111’]
三、几个案例
\qquad 1、检验用户输入的是否为手机号码,手机号码为11位数字
import re
a = input("请输入手机号:")
ret = re.match("\d{11}$",a)
if ret:
print("输入的手机号码%s符合规范" % a)
else:
print("输入的手机号码%s不符合规范" % a)
\qquad 2、检验一个字符是否符合作为变量名的标准。变量名只能由下划线(_)、字母、数字组成,第一个字符不能是数字。
import re
names = ['asd','_asd','3_d','d_3','a!a','aa#']
for name in names:
ret = re.match("[a-zA-Z_][a-zA-Z0-9_]*$",name)
if ret:
print("字符串%s可以作为变量名" % name)
else:
print("字符串%s不可以作为变量名" % name)
\qquad 3、检验用户输入的是否为163邮箱,给定的条件是@前面只能由数字或者字母组合,且字符数量在5-20之间。
import re
a = input("请输入一个邮箱:")
ret = re.match("[a-zA-Z0-9]{5,20}@163.com$",a)
if ret:
print("输入的邮箱%s是一个规范的163邮箱" % a)
else:
print("输入的邮箱%s不是一个规范的163邮箱" % a)
本文详细介绍了Python正则表达式的作用,如判断数据规则和获取特定数据,并讲解了match、search、findall和sub等核心用法,以及split函数在字符串切割中的应用。通过案例展示了手机号码、变量名和163邮箱的正则验证。
2万+

被折叠的 条评论
为什么被折叠?



