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())
相关推荐
方安乐19 小时前
python之向量、向量和、向量点积
开发语言·python·numpy
zh15702321 小时前
JavaScript中WorkerThreads解决服务端计算瓶颈
jvm·数据库·python
蜡台21 小时前
Python包管理工具pip完全指南-----2
linux·windows·python
Mr.朱鹏1 天前
【Python 进阶 | 第四篇】Psycopg3 + Flask 实现 PostgreSQL CRUD 全流程:从连接池到RESTful接口
python·postgresql·flask·virtualenv·fastapi·pip·tornado
2401_871492851 天前
Vue.js监听器watch利用回调函数处理级联下拉框数据联动
jvm·数据库·python
FreakStudio1 天前
亲测可用!可本地部署的 MicroPython 开源仿真器
python·单片机·嵌入式·面向对象·并行计算·电子diy·电子计算机
SilentSamsara1 天前
Python 环境搭建完整指南:从下载安装到运行第一个程序
开发语言·python
zhoutongsheng1 天前
C#怎么实现Swagger文档 C#如何在ASP.NET Core中集成Swagger自动生成API文档【框架】
jvm·数据库·python
.5481 天前
## Sorting(排序算法)
python·算法·排序算法
ydmy1 天前
注意力机制(个人理解)
pytorch·python·深度学习