Python正则表达式

什么是正则表达式

复制代码
"""
    正则表达式
        本质上就是一个字符串
        字符串有固定的规则,可以用字符串匹配验证这个规则
        比如:判断身份证号,邮箱验证
    1.如何使用正则
        python中内置库提供一个模块,re

    2.常见的内置函数
        match()     从头开始匹配正则,如果匹配上则返回match对象,否则返回none,开头没有匹配到就返回none
        findall()   根据正则匹配字符串中所有满足规则的匹配项,返回一个列表
        search()    根据正则扫描整个字符串,找到第一个出现匹配项为止,返回match对象
        split()     根据正则分割字符串,返回一个列表
        sub()       根据正则完成字符串的替换
"""

re模块

python中提供了一个模块re(Regular Expression),专门支持正则表达式的处理 语法

函数名 作用
match() 从头开始匹配,匹配上返回match对象,如果开头没有匹配上则返回none
findall() 根据匹配字符串中返回满足规则的匹配项,返回一个列表
search() 根据匹配字符串扫码整个字符串,找到第一个匹配项为止,返回match对象
split() 根据正则分割字符串,返回一个列表
sub() 根据正则完成字符串的替换
python 复制代码
#导入re模块
import re

match()

python 复制代码
print(re.match("abc","abcdefg"))	#<re.Match object; span=(0, 3), match='abc'>
print(re.match("abc","defgabc"))	#None

#匹配对象(Match Object)的方法
res = re.match("abc","abcdefg")
print(res)
print(f"匹配的内容为: {res.group()}")    #abc
print(f"匹配的区间为: {res.span()}")     #(0,3)

findall()

python 复制代码
print(re.findall("abc","abcdaabcdefabcgabc"))

search()

python 复制代码
print(re.search("abc","abcdaabcdefabcgabc"))
print(re.match("abc","daabcdefabcgabc"))

split()

python 复制代码
print(re.split("abc","abcdaabcdefabcgabc"))

sub()

python 复制代码
print(re.sub("abc","喜喜","abcdaabcdefabcgabc"))

正则基础字符

复制代码
"""
    1.匹配单个字符  --只匹配单个字符
        规则:
            . 匹配单个字符
            \w 匹配单词字符 a-z/A-Z/0-9_
            \W 匹配非单词字符 $,%
            \d 数字字符
            \D 非数字字符
            \s 空白字符
            \S 非空白字符
            [内容] 匹配单个内容字符

    2.数量词   --在单个字符的基础上加数量词
        [X]*    0/多个
        [X]+    1/多个
        [X]?    0/1
        [X]{m}  m个
        [X]{m,} 至少匹配m个
        [X]{m,n} m-n个

    3.起止符
        ^以什么开头  $以什么结尾

    4.分组
        主要用于做筛选
        ()

    5.面试题: 贪婪和非贪婪
        贪婪: 在正则表达式中,匹配规则默认是尽可能多的去匹配
        非贪婪:尽可能少的去匹配,关闭打开方式为数量词后加?
"""

匹配规则

python 复制代码
#.
print(re.match(".","abc"))
print(re.match("..","#abc"))


#单词字符 \w a-z/A-Z/0-9_
print(re.match(r"[0-9]","7abc"))
print(re.match(r"\w","abc"))
print(re.match(r"\w","7abc"))
print(re.match(r"\w","Abc"))
print(re.match(r"\w","_abc"))
print(re.match(r"\w","$abc"))

#\W
print(re.match(r"\W","$abc"))

#\d \D
print(re.match(r"\d","abc"))
print(re.match(r"\d","1abc"))
print(re.match(r"\D","abc"))

#\s \S
print(re.match(r"\s"," abc"))
print(re.match(r"\S","abc"))

#案例: 测试网址 www.baidu.com
print(re.match("[w][w][w]","www.baidu.com"))

print(re.match("[0][2][9]","029-123424"))

print(re.match("[x|X]","X"))

数量词

python 复制代码
#* + 匹配0个或者多个
print(re.match(r"\d*","abc"))       #*返回的是一个空值
print(re.match(r"\d*","123abc"))
print(re.match(r"\d+","abc"))       #+返回的是None
print(re.match(r"\d+","123abc"))

#?  匹配0个或者1个
print(re.match(r"\d?","abc"))       #匹配不到也是返回空值
print(re.match(r"\d?","123abc"))

#案例:qq号
#{m,n}  匹配m到n次
print(re.match(r"\d{6,11}","3233198908"))
print(re.match(r"\d{6,11}","13415218045"))
print(re.match(r"\d{6,11}","44180220040927111X"))

#判断号码 029-12345678
print(re.match(r"\d*\W\d{8}","029-12345678"))
print(re.match(r"[029]{3}-\d{8}","029-12345678"))


#电话
print(re.match(r"\d{11}","13488818885"))

起止符

python 复制代码
print(re.match(r"^lisi","lisi123lisi"))
print(re.match(r"^lisi","lilisi123lisi"))
print(re.findall(r"^lisi","lisi123lisi"))

print(re.findall(r"lisi$","lisi123lisi"))
print(re.findall(r"lisi$","lisi123lis2i"))

分组

python 复制代码
res = re.match(r"^(www)(.+)(com|cn)$","www.baidu.com")
print(res)
print(res.groups())
print(res.group(0))
print(res.group(1))
print(res.group(2))
print(res.group(3))

#案例:判断某个人的身份证的出生年月日
res = re.match(r"\d{6}(\d{8})\d{3}[x|X]","44180220040927112X")
print(res)
print(res.groups())
print(res.group(1))

贪婪和非贪婪

python 复制代码
res = re.match(r"(.*)(\d+-\d+-\d+)","this is numbers 123-456-780")
print(res)
print(res.groups())

res = re.match(r"(.*?)(\d+-\d+-\d+)","this is numbers 123-456-780")
print(res)
print(res.groups())
相关推荐
Bruk.Liu3 分钟前
(LangChain 实战14):基于 ChatMessageHistory 自定义实现对话记忆功能
人工智能·python·langchain·agent
大江东去浪淘尽千古风流人物18 分钟前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法
Swift社区19 分钟前
Gunicorn 与 Uvicorn 部署 Python 后端详解
开发语言·python·gunicorn
Coinsheep23 分钟前
SSTI-flask靶场搭建及通关
python·flask·ssti
IT实战课堂小元酱23 分钟前
大数据深度学习|计算机毕设项目|计算机毕设答辩|flask露天矿爆破效果分析系统开发及应用
人工智能·python·flask
码农阿豪24 分钟前
Flask应用上下文问题解析与解决方案:从错误日志到完美修复
后端·python·flask
wqq631085527 分钟前
Python基于Vue的实验室管理系统 django flask pycharm
vue.js·python·django
Q_Q196328847528 分钟前
python大学生爱心校园互助代购网站_nyvlx_django Flask vue pycharm项目
python·django·flask
码农阿豪31 分钟前
Python Flask应用中文件处理与异常处理的实践指南
开发语言·python·flask
xcLeigh32 分钟前
Python 项目实战:用 Flask 实现 MySQL 数据库增删改查 API
数据库·python·mysql·flask·教程·python3