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())
相关推荐
二月夜6 小时前
剖析Java正则表达式回溯问题
java·正则表达式
珺毅同学7 小时前
YOLO生成预测json标签迁移问题
python·yolo·json
骑士雄师7 小时前
18.4 长期记忆可修改版
python
~小先生~8 小时前
Python从入门到放弃(一)
开发语言·python
天佑木枫8 小时前
第2天:变量与数据类型 —— 让程序记住信息
python
Dust-Chasing9 小时前
Claude Code源码剖析 - Claude Code 上下文压缩机制
人工智能·python·ai
Cloud_Shy61810 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 33 - 35)
开发语言·人工智能·笔记·python·学习方法
abcy07121311 小时前
python pandas csv异步后台清洗前端优先返回成功信息
前端·python·pandas
颜酱11 小时前
LangChain使用RAG 入门:让大模型读懂你的私有文档
python·langchain
天天进步201511 小时前
Python全栈项目--校园智能宿舍管理系统
开发语言·python