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())
相关推荐
曲幽1 小时前
我用了FastApiAdmin后,连夜把踩过的坑都整理出来了
redis·python·postgresql·vue3·fastapi·web·sqlalchemy·admin·fastapiadmin
前端若水3 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
涛声依旧-底层原理研究所4 小时前
残差连接与层归一化通俗易懂的详解
人工智能·python·神经网络·transformer
csdn_aspnet4 小时前
Python 算法快闪 LeetCode 编号 70 - 爬楼梯
python·算法·leetcode·职场和发展
fantasy_arch4 小时前
pytorch人脸匹配模型
人工智能·pytorch·python
熊猫_豆豆4 小时前
广义相对论水星近日点进动完整详细数学推导
python·天体·广义相对论
web3.08889994 小时前
1688 图搜接口(item_search_img / 拍立淘) 接入方法
开发语言·python
AI算法沐枫5 小时前
深度学习python代码处理科研测序数据
数据结构·人工智能·python·深度学习·决策树·机器学习·线性回归
X1A0RAN6 小时前
解决Pycharm中部分文件或文件夹被隐藏不展示问题
ide·python·pycharm
MomentYY6 小时前
第 3 篇:让 Agent 学会分工,LangGraph 构建多 Agent系统
人工智能·python·agent