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())
相关推荐
前端精髓7 小时前
结构化输出with_structured_output(抽卡)
python·langchain
尹人入圣8 小时前
目前热门的IP驱动产业新场景新工具
网络·python·网络协议·tcp/ip
Nuanyt9 小时前
Agent 学习笔记(下篇三):上线工程、进阶选择与操作界面(Stage 7 / 7.5 / 8 + 延伸路线)
笔记·python·学习·memory·aiagent·harness
吴卫斌9 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
2601_967987379 小时前
Python——入门级(定义功能def函数)
python·函数·可变参数·默认参数·关键字参数
专注仿真11 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
外收内放11 小时前
Python基础语法练习题(75)
开发语言·python·学习
黑十13 小时前
PyTorch 报 “no CUDA GPUs are available“ 怎么办?3 步排查
服务器·网络·人工智能·pytorch·python
threelab13 小时前
开源图片去水印代码
python
taller_200014 小时前
【012】数据类型入门: Excel 数据到 Python 值的转换
python·excel·pie·py