python正则化表达式

本文详细介绍了Python正则表达式的作用,如判断数据规则和获取特定数据,并讲解了match、search、findall和sub等核心用法,以及split函数在字符串切割中的应用。通过案例展示了手机号码、变量名和163邮箱的正则验证。

一、正则化表达式作用

\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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值