# ### 正则表达式 => 正则函数
import re
# search 通过正则匹配出第一个对象返回,通过group取出对象中的值
strvar = "5*7 9/8"
obj = re.search("(\d+)[*/]\d+",strvar)
print(obj)
# group 获取匹配的内容
res = obj.group()
print(res)
res = obj.groups()
print(res)
# match 验证用户输入内容
"""search在正则表达式的前面加上^ 就与math函数一模一样"""
strvar = "17166668888"
strvar = "y17166668888"
obj = re.search("^\d+",strvar)
# print(obj.group())
print(obj)
obj = re.match("\d+",strvar)
# print(obj.group())
print(obj)
# split 切割
strvar = "alex|wusir|xboyww-xgirlww"
lst = strvar.replace("-","|").split("|")
print(lst)
# - 具有特殊的含义,使用时需要转义
strvar = "alex|wusir-xboyww&xgirlww"
res = re.split(r"[|\-&]",strvar)
print(res)
strvar = "alex2342wusir23423423242xboyww2222222xgirlww"
res = re.split("\d+",strvar)
print(res)
# split(正则表达式,字符串,[选择分割的次数,可选]) 返回列表
res = re.split("\d+",strvar,1)
print(res)
# sub 替换 返回的结果是一个字符串
strvar = "alex|wusir-xboyww&xgirlww"
res = re.sub(r"[|&-]","%",strvar)
print(res)
# sub(正则表达式,要替换的字符串,原字符串,[选择替换的次数,可选]) 返回字符串
res = re.sub(r"[|&-]","%",strvar,1)
print(res)
# subn 替换 用法上与sub一样,但是返回的结果是元组,(替换后的结果,替换的次数)
strvar = "alex|wusir-xboyww&xgirlww"
res = re.subn(r"[|&-]","%",strvar,1)
print(res)
# finditer 匹配字符串中相应内容,返回迭代器
"""findall 与 finditer用法一样,区别在于 findall返回的是列表,finditer返回迭代器"""
from collections import Iterator,Iterable
strvar = "sdfsd&^*12招待费34sdf"
it = re.finditer("\d",strvar)
# 判断是否是迭代器
res = isinstance(it,Iterator)
print(res)
for i in it:
# print(i) #<_sre.SRE_Match object; span=(8, 9), match='1'>
res = i.group()
print(res)
# compile 指定一个统一的匹配规则
"""
正常情况下,需要先编译好正则表达式,再去执行匹配
如果频繁的反复使用,浪费时间和空间
所以使用compile 用来编译一次,终身受益,不用对同一个正则反复编译啦
"""
strvar = "sdfsd&^*12招待费34sdf"
pattern = re.compile("\d")
print(pattern)
res = pattern.findall(strvar)
print(res)
# 修饰符
# re.I 使匹配对大小写不敏感
strvar = "<h1>这是一个大标题</H1>"
pattern = re.compile("<h1>(.*?)</h1>",flags=re.I)
obj = pattern.search(strvar)
print(obj)
print(obj.group())
print(obj.groups())
# re.M 使每一行都能够单独匹配(多行匹配),影响 ^ 和 $
strvar = """<a>sdfsdfsd</a>
<p>234234234</p>
<div>^&^&&%</div>
"""
pattern = re.compile("^<.*?>(.*?)<.*?>$",flags=re.M)
obj = pattern.search(strvar)
print(obj.group())
print(obj.groups())
lst = pattern.findall(strvar)
print(lst)
# re.S 使 . 匹配包括换行在内的所有字符
strvar = """
give
123mefive
"""
pattern = re.compile(".*?mefive",flags=re.S)
obj = pattern.search(strvar)
print(obj)
"""
# 不加修饰符,加上修饰,两个结果的差别;
123mefiiv
\ngive\n123mefive
"""
# 使用多个修饰符的写法 (拓展)
strvar = """<a>sdfsdfsd</a>
<p>234234234</p>
<div>^&^&&%</P>
"""
pattern = re.compile("^<.*?>(.*?)</p>$",flags=re.I|re.S)
obj = pattern.search(strvar)
print(obj.group())
print(obj.groups())
随笔 - 77
文章 - 0
评论 - 0
阅读 -
21363
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律