正则表达式(python版最全面,最易懂)
正则表达式
正则表达式英文称regular expression
定义:正则表达式是一种文本模式匹配的工具,用于字符串的搜索,匹配和替换。在excel,word以及其他的文本编辑器都可直接适配。
一、基本匹配规则
-
字面值字符:例如字母、数字、空格等,可以直接匹配它们自身。
-
特殊字符:例如点号
.
、星号*
、加号+
、问号?
等,它们具有特殊的含义和功能。 -
字符类:用方括号
[ ]
包围的字符集合,用于匹配方括号内的任意一个字符。 -
元字符:例如
\d
、\w
、\s
等,用于匹配特定类型的字符,如数字、字母、空白字符等。 -
量词:例如
{n}
、{n,}
、{n,m}
等,用于指定匹配的次数或范围。 -
边界符号:例如
^
、$
、\b
、\B
等,用于匹配字符串的开头、结尾或单词边界位置。
1.字符匹配
普通字符匹配:直接匹配文本中的字符,如abc
表示直接匹配文本中包含为“abc”的字符
元字符匹配:元字符具有特殊的含义,例如 \d
匹配任意数字字符,\w
匹配任意字母数字字符,.
匹配任意字符(除了换行符)等。
常见的元字符如下:
元字符 | 含义 | 示例 |
---|---|---|
. | 匹配任意单个字符(换行符除外) | a.c 匹配 "abc"、"a1c" |
^ | 匹配字符串开头 | ^abc 匹配 "abc123" |
$ | 匹配字符串结尾 | abc$ 匹配 "123abc" |
* | 匹配前一个字符 0 次或多次 | a* 匹配 "", "a", "aaa" |
+ | 匹配前一个字符 1 次或多次 | a+ 匹配 "a", "aaa" |
? | 匹配前一个字符 0 次或 1 次 | a? 匹配 "", "a" |
{n} | 匹配前一个字符 n 次 | a{3} 匹配 "aaa" |
{n,m} | 匹配前一个字符 n 到 m 次 | a{2,4} 匹配 "aa", "aaa", "aaaa" |
[] | 匹配字符集合中的任意一个字符 | [abc] 匹配 "a", "b", "c" [a-z] 匹配小写字母 a 到 z 的任意一个 [0-9] 匹配数字 0 到 9 的任意一个 [^...] 匹配不在括号内的任意字符(字符集的否定) |
| | 或运算 | |
\ | 转义字符,转义元字符或定义特殊字符 | \d 、\s 、\w , C:\\Users\\Qiu |
\d | 匹配任何数字,相当于 [0-9] | |
\D | 匹配任何非数字字符,相当于 [^0-9] | |
\w | 匹配任何单词字符(字母、数字、下划线),相当于 [a-zA-Z0-9_] | |
\W | 匹配任何非单词字符,相当于 [^a-zA-Z0-9_] | |
\s | 匹配任何空白字符(空格、制表符、换行符等) | |
\S | 匹配任何非空白字符 | |
() | 用于分组和捕获子表达式。 | (\d{4})-(\d{2}-\d{2}) 将\d{4} 和\d{2}-\d{2} 分为两组,可以对这两组进行捕获以及后期直接引用 (\w{3})(\1) 表示匹配连续两段的字母,如abbabb |
(?: ) | 用于分组但不捕获子表达式。 |
2.量词匹配
-
*
:匹配前面的模式零次或多次。 -
+
:匹配前面的模式一次或多次。 -
?
:匹配前面的模式零次或一次。 -
{n}
:匹配前面的模式恰好 n 次。 -
{n,}
:匹配前面的模式至少 n 次。 -
{n,m}
:匹配前面的模式至少 n 次且不超过 m 次。
3.字符类
-
[ ]
:匹配括号内的任意一个字符。例如,[abc]
匹配字符 "a"、"b" 或 "c"。 -
[^ ]
:匹配除了括号内的字符以外的任意一个字符。例如,[^abc]
匹配除了字符 "a"、"b" 或 "c" 以外的任意字符。
4.边界匹配(定位符)
定位符用来描述字符串或单词的边界,^ 和 $ 分别指字符串的开始与结束,\b 描述单词的前或后边界,\B 表示非单词边界。
-
^
:匹配字符串的开头。 -
$
:匹配字符串的结尾。 -
\b
:匹配单词边界。 -
\B
:匹配非单词边界。
5.分组和捕获
-
( )
:用于分组和捕获子表达式。 -
(?: )
:用于分组但不捕获子表达式。
6.特殊字符
-
\
:转义字符,用于匹配特殊字符本身。 -
.
:匹配任意字符(除了换行符)。 -
|
:用于指定多个模式的选择。
7.分组与引用
()
表示分组,匹配子表达式并捕获;()
会把每个分组里的匹配的值保存起来, 多个匹配值可以通过数字 n 来查看(n 是一个数字,表示第 n 个捕获组的内容)。如:(\w{3})(\1)
表示匹配连续两段的字母,如abbabb
-
(\d{4})-(\d{2}-\d{2})
将\d{4}
和\d{2}-\d{2}
分为两组,可以对这两组进行捕获以及后期直接引用
但用圆括号会有一个副作用,使相关的匹配会被缓存,此时可用 ?:
放在第一个选项前来消除这种副作用。即?:
仅于分组但不捕获子表达式。
其中?:
为非捕获元之一,非捕获元表示不会将表达式内容包含在结果当中。同等的非捕获元还有?=
和 ?!
8.正、负向零宽断言
?=
:正向零宽断言 (Positive Lookahead)
-
exp1(?=exp2)
查找在exp2
前面的exp1
,且exp2
不会包含在结果当中 -
(?<=exp2)exp1
表示查找在exp2
前面的exp1
,且exp2
不会包含在结果当中
import repattern = r"I love (?=python)" # 匹配 "python" 前面带有 "I love " 的部分text = "I love python, I love coding."match = re.search(pattern, text)if match:print(match.group()) # 输出:I love
?!
:负向零宽断言 (Negative Lookahead)
-
exp1(?!exp2)
查找在exp2
后面不跟 的exp1
,且exp2
不会包含在结果当中。 -
(?<!exp2)exp1
查找在exp2
前面不跟 的exp1
,且exp2
不会包含在结果当中。
import repattern = r"I love (?!python)"text = "I love coding, I love python." # 匹配不以 "python" 结尾的 "I love "matches = re.findall(pattern, text)print(matches) # 输出:['I love ']
?=
和 ?!
的区别:
特性 | ?= (正向断言) | ?! (负向断言) |
---|---|---|
断言结果 | 后面 必须是 pattern | 后面 不能是 pattern |
是否消耗字符 | 否 | 否 |
适用场景 | 验证后续内容符合预期 | 排除后续内容不符合预期 |
9.贪婪与非贪婪匹配
*
和 +
限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。
贪婪匹配:尽可能多地匹配。
-
示例:
a.*b
匹配 "a123b456b" 中的 "a123b456b"。
非贪婪匹配:尽可能少地匹配。
-
语法:在元字符后加
?
。 -
示例:
a.*?b
匹配 "a123b456b" 中的 "a123b"。
案例:如<.*>
会匹配到如下html标签内的所有值
但是如果我们只需要匹配一个<h1>
标签,我们可以使用非贪婪匹配:<.*?>
通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从"贪婪"表达式转换为"非贪婪"表达式或者最小匹配。
10.标记/修饰符(flag)
符号 | 作用 | 示例 |
---|---|---|
i | ignore - 不区分大小写 | 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。 |
g | global - 全局匹配 | 查找所有的匹配项。 |
m | multi line - 多行匹配 | 使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。 |
s | 特殊字符圆点 . 中包含换行符 \n | 默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。 |
-
i表示不区分大小写:
-
m表示多行匹配(每行都进行匹配)
-
默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 之后, . 中包含换行符 \n。
python re库内的正则表达式支持的修饰符(可选标志)
re.IGNORECASE
(re.I
):忽略大小写。
re.MULTILINE
(re.M
):多行模式,^
和 $
会匹配每一行的开头和结尾。
re.DOTALL
(re.S
):单行模式,使 .
匹配换行符。
re.VERBOSE
(re.X
):允许在正则表达式中添加注释和多行书写。
其他标志如 re.ASCII
、re.LOCALE
等。
二、Python正则表达式API使用
Python 提供了 re
模块用于操作正则表达式。
函数 | 含义 |
---|---|
re.match | 从字符串开头匹配,返回 Match 对象 |
re.search | 在字符串中搜索第一个匹配 |
re.findall | 返回所有匹配结果的列表 |
re.finditer | 返回所有匹配结果的迭代器 |
re.sub | 替换匹配到的内容 |
re.split | 按正则表达式分割字符串 |
1.查找
方法 | 作用描述 |
---|---|
re.match | 从字符串的开头尝试匹配正则表达式,只返回第一个匹配的对象。 |
re.search | 搜索整个字符串,返回第一个匹配的对象。 |
re.findall | 搜索所有符合正则表达式的内容,返回匹配结果的列表。 |
re.finditer | 搜索所有符合正则表达式的内容,返回一个迭代器(每项是 Match 对象)。 |
1.re.match
/re.search
re.match
只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None,而 re.search
匹配整个字符串,直到找到一个匹配。
re.match(pattern, string, flags=0) # pattern正则表达式;string需要匹配的字符;flag修饰符模式。match匹配字符串的开始,如果字符串开始不符合正则表达式,则返回None,否则返回一个Match对象re.search(pattern, string, flags=0) # re.search 匹配整个字符串,匹配成功返回一个Match对象,否则返回None
Match对象方法:
-
group(num=0)
当查找字符串分组时,group(num) 将返回对应num组的元组(1开始分组),group(0)/group(num)表示全部匹配字符串。 -
groups()
返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
import reline = "Cats are smarter than dogs"# 匹配字符串的开始,如果开始不成功,则匹配失败matchObj = re.match(r"dogs", line, re.M | re.I) # return:Noneif matchObj:print(matchObj.group())else:print("No match!!") # No match!!# 匹配整个字符串直到找到至少一个匹配matchObj = re.search(r"dogs", line, re.M | re.I) # return:dogsif matchObj:print(matchObj.group()) # dogselse:print("No match!!")分组text2 = "18812345678,他还有一个电话号码是18887654321,他爱好的数字是01234567891,他的座机是:0571-52152166,0571-52152177"m1 = re.search(r"(\d{4})-(\d{8})", text2) # 返回一个Match对象,调用Match对象的group方法获取返回值print(m1.group()) # 0571-52152166print(m1.group(1)) # 0571,取表达式的第一组匹配值(\d{4})print(m1.group(2)) # 52152166,取表达式的第二组匹配值(\d{8})
2.findall
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。
re.findall(pattern, string, flags=0)或pattern.findall(string[, pos[, endpos]])
-
pattern 匹配模式。
-
string 待匹配的字符串。
-
pos 可选参数,指定字符串的起始位置,默认为 0。
-
endpos 可选参数,指定字符串的结束位置,默认为字符串的长度。
import reresult1 = re.findall(r'\d+','runoob 123 google 456')pattern = re.compile(r'\d+') # 查找数字result2 = pattern.findall('runoob 123 google 456')result3 = pattern.findall('run88oob123google456', 0, 10)print(result1) # ['123', '456']print(result2) # ['123', '456']print(result3) # ['88', '12']多个匹配模式,返回元组列表import reresult = re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')print(result) # [('width', '20'), ('height', '10')]
3.re.finditer
和 findall
类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
re.finditer(pattern, string, flags=0)import reit = re.finditer(r"\d+","12a32bc43jf3") for match in it: print(match.group())12 32 43 3
findall
和finditer
的区别
-
findall
返回的可能是元组列表,也可能是字符串列表,取决于正则表达式内是否分组 -
finditer
返回的是Match对象
的迭代器
2.替换
替换功能可以用正则表达式匹配到的部分内容进行替换,主要通过 re.sub
和 re.subn
方法实现。
方法 | 作用描述 |
---|---|
re.sub | 替换匹配到的内容,返回替换后的新字符串。 |
re.subn | 替换匹配到的内容,返回元组 (新字符串, 替换次数) 。 |
-
sub
:返回替换后的字符串。 -
subn
:返回包含替换后字符串和替换次数的元组。
1.re.sub&re.subn
re.sub(pattern, repl, string, count=0, flags=0) # 前三个为必选参数,后两个为可选参数。
-
pattern : 正则中的模式字符串。
-
repl : 替换的字符串,也可为一个函数。
-
string : 要被查找替换的原始字符串。
-
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
-
flags : 编译时用的匹配模式,数字形式。
import rephone = "2004-959-559 # 这是一个电话号码"# 删除注释num = re.sub(r'#.*$', "", phone)print ("电话号码 : ", num)# 移除非数字的内容num = re.sub(r'\D', "", phone)print ("电话号码 : ", num)# 当repl 参数是一个函数import re# 将匹配的数字乘以 2def double(matched):value = int(matched.group('value'))return str(value * 2)s = 'A23G4HFD567'print(re.sub('(?P<value>\d+)', double, s)) # A46G8HFD1134
subn和sub用法一样,只是subn会额外将替换的次数一起封装成元组返回
text = "abc,adfasda,Abc,ABC"sub = re.sub(r"(abc)", "***", text, flags=re.I)subn = re.subn(r"(abc)", "***", text, flags=re.I)print(sub) # re.sub返回替换后的字符串,***,adfasda,***,***print(subn) # re.subn返回替换后的字符串和替换次数的元组,('***,adfasda,***,***', 3)
3.分割split
re.split(pattern, string[, maxsplit=0, flags=0])
-
pattern
正则表达式 -
string
需要匹配的字符串 -
maxsplit
分割次数,maxsplit=1 分割一次,默认为 0表示不限制次数。 -
flags
标志位
text6 = "abc, ddd? xxx. fff! asd"split = re.split(r"\s*[,?!.]\s*", text6) # 将【,?!.】符号以及旁边的空格作为分隔符分割字符串,返回一个字符串数组print(split) # ['abc', 'ddd', 'xxx', 'fff', 'asd']re.split('a*', 'hello world') # 对于一个找不到匹配的字符串而言,split 不会对其作出分割# ['hello world']
4.compile
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。语法格式为:
re.compile(pattern[, flags])
-
pattern : 一个字符串形式的正则表达式
-
flags 可选,表示匹配模式,比如忽略大小写,多行模式等
-
返回
RegexObject
对象,该对象可以调用匹配方法(如match
、search
、findall
等)。
# 编译正则表达式pattern = re.compile(r"\d+")# compile# 使用编译的正则对象进行匹配和查找result1 = pattern.findall("There are 3 cats and 4 dogs.")result2 = pattern.findall("There are 6 cats and 8 dogs.")print(result1) # 输出 ['3', '4']print(result2) # 输出 ['6', '8']
re.compile()
是处理复杂正则表达式的最佳选择,尤其是需要频繁使用相同的正则时。它能提高代码效率、增强可读性,是 Python 正则表达式模块中非常重要的功能。
相关文章:
正则表达式(python版最全面,最易懂)
正则表达式 正则表达式英文称regular expression 定义:正则表达式是一种文本模式匹配的工具,用于字符串的搜索,匹配和替换。在excel,word以及其他的文本编辑器都可直接适配。 一、基本匹配规则 字面值字符:例如字母、数字、空格…...
QT 使用QTableView读取数据库数据,表格分页,跳转,导出,过滤功能
文章目录 效果图概述功能点代码分析导航栏表格更新视图表格导出表格过滤 总结 效果图 概述 本案例用于对数据库中的数据进行显示等其他操作。数据库的映射,插入等功能看此博客框架:数据模型使用QSqlTableModel,视图使用QTableView࿰…...
golang标准库path/filepath使用示例
文章目录 前言一、常用方法示例1.将相对路径转换为绝对路径2.获取路径中最后一个元素3.获取路径中除去最后一个元素的部分4.路径拼接5.将路径拆分为目录和文件名两部分6.返回一个相对路径7.文件路径遍历8.根据文件扩展名过滤文件9.使用正则表达式进行路径匹配 前言 path/filep…...
【日志篇】(7.6) ❀ 01. 在macOS下刷新FortiAnalyzer固件 ❀ FortiAnalyzer 日志分析
【简介】FortiAnalyzer 是 Fortinet Security Fabric 安全架构的基础,提供集中日志记录和分析,以及端到端可见性。因此,分析师可以更有效地管理安全状态,将安全流程自动化,并快速响应威胁。具有分析和自动化功能的集成…...
12 分布式事务
分布式事务产生的原因 我们拿mysql数据库来说,当数据库为单体数据库的时候,我们打开事务,执行sql为预执行阶段,最后commit时通过日志控制最终全部提交后存储到磁盘中,如果commit失败,可以通过日志控制回滚…...
移远通信多模卫星通信模组BG95-S5获得Skylo网络认证,进一步拓展全球卫星物联网市场
近日,全球领先的物联网整体解决方案供应商移远通信正式宣布,其支持“卫星蜂窝”多模式的高集成度NTN卫星通信模组BG95-S5已成功获得NTN网络运营商Skylo的网络认证。BG95-S5也成为了获得该认证的最新款移远卫星通信模组。 BG95-S5模组顺利获得Skylo认证&a…...
51.WPF应用加图标指南 C#例子 WPF例子
完整步骤: 先使用文心一言生成一个图标如左边使用Windows图片编辑器编辑,去除背景使用正方形,放大图片使图标铺满图片使用格式工程转换为ico格式,分辨率为最大 在资源管理器中右键项目添加ico类型图片到项目里图片属性设置为始终…...
OpenEuler学习笔记(三):为什么要搞OpenEuler?
为什么要搞OpenEuler? 技术自主可控需求 在信息技术领域,操作系统是关键的基础软件。过去,很多关键技术被国外厂商掌控,存在技术“卡脖子”的风险。OpenEuler的出现可以为国内提供一个自主可控的操作系统选择。例如,在…...
Apache Hive--排序函数解析
在大数据处理与分析中,Apache Hive是一个至关重要的数据仓库工具。其丰富的函数库为数据处理提供了诸多便利,排序函数便是其中一类非常实用的工具。通过排序函数,我们能够在查询结果集中为每一行数据分配一个排名值,这对于数据分析…...
LLMs之Dataset:中文互联网基础语料2.0的简介、下载和使用方法、案例应用之详细攻略
LLMs之Dataset:中文互联网基础语料2.0的简介、下载和使用方法、案例应用之详细攻略 目录 中文互联网基础语料2.0的简介 1、特点 中文互联网基础语料2.0的下载和使用方法 中文互联网基础语料2.0的案例应用 中文互联网基础语料2.0的简介 2025年1月发布࿰…...
深入剖析iOS网络优化策略,提升App性能
一、引言 在当今移动互联网时代,iOS 应用的网络性能直接关系到用户体验。无论是加载速度缓慢、频繁的网络错误,还是高额的流量消耗,都可能导致用户流失。因此,iOS 网络优化成为开发者提升应用质量、增强用户满意度的关键环节。本文…...
unity2022以上导出到AndroidStudio后更新步骤
1、unity里面Export出unityLibrary 2、导出apk,里面才包含libil2cpp(新版unity无法直接导出libil2cpp 3、注释AS项目app下的build.gradle里面包含unityLibrary的代码 4、注释AS项目settings.gradle包含unityLibrary的代码 5、删除AS项目里面的unityLibrary文件夹 6、…...
03JavaWeb——Ajax-Vue-Element(项目实战)
1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据,如下图所示的表格中的学生信息,应该来自于后台,那么我们的后台和前端是互不影响的2个程序,那么我们前端应该如何从后台获取数据呢?因为是2个程序…...
表单中在不设置required的情况下在label前加*必填标识
参考:https://blog.csdn.net/qq_55798464/article/details/136233718 需求:在发票类型前面添加*必填标识 我最开始直接给发票类型这个表单类型添加了验证规则required:true,问题来了,这个发票类型它是有默认值的,所以我点击保存…...
Mac 使用 GVM 管理多版本 Go 环境
使用 GVM 管理多版本 Go 环境 在本文中,我们将使用 gvm(Go Version Manager)工具管理本地多个 Go 语言版本。gvm 功能类似于 Python 的 Anaconda,可以方便地切换不同版本的 Go 环境,非常适合需要多版本开发与测试的场…...
3DsMax设置中文界面
按键盘上的“Win”键,直接输入3dsmax,选择Simplified Chinese打开,之后就都是中文了...
【PyCharm】连接 Git
【PyCharm】相关链接 【PyCharm】连接 Git【PyCharm】连接Jupyter Notebook【PyCharm】快捷键使用【PyCharm】远程连接Linux服务器【PyCharm】设置为中文界面 要在 PyCharm 中连接 Git,确保您的开发环境已经安装了 Git,并且 PyCharm 能够访问它。 以下…...
使用Python和PIL裁剪图片以适应屏幕宽高比
在本教程中,我们将介绍如何使用Python和PIL(Python Imaging Library)库来裁剪图片,使其适应特定的屏幕宽高比。我们将详细解释代码的每个部分,并展示如何根据不同的裁剪模式来调整图片。 1. 安装PIL库 首先ÿ…...
Django简介与虚拟环境安装Django
目录 1.Django简介 1.1 Django 的核心特点 1.2 Django 的核心组件 1.3 Django 的应用场景 1.4 总结 2.基础环境建立 2.1 创建虚拟环境 2.1.1 使用 virtualenv 创建虚拟环境 2.1.2 使用 venv 创建虚拟环境 2.2 激活虚拟环境 2.2.1 在 Windows 上 2.2.2 在 macOS 或 …...
python实现pdf转word和excel
一、引言 在办公中,我们经常遇收到pdf文件格式,因为pdf格式文件不易修改,当我们需要编辑这些pdf文件时,经常需要开通会员或收费功能才能使用编辑功能。今天,我要和大家分享的,是如何使用python编程实现…...
Ubuntu 24.04 LTS 更改软件源
Ubuntu 24.04 LTS 修改软件源...
从CRUD到高级功能:EF Core在.NET Core中全面应用(三)
目录 IQueryable使用 原生SQL使用 实体状态跟踪 全局查询筛选器 并发控制使用 IQueryable使用 在EFCore中IQueryable是一个接口用于表示可查询的集合,它继承自IEnumerable但具有一些关键的区别,使得它在处理数据库查询时非常有用,普通集…...
浅谈云计算22 | Kubernetes容器编排引擎
Kubernetes容器编排引擎 一、Kubernetes管理对象1.1 Kubernetes组件和架构1.2 主要管理对象类型 二、Kubernetes 服务2.1 服务的作用与原理2.2 服务类型 三、Kubernetes网络管理3.1 网络模型与目标3.2 网络组件3.2.1 kube-proxy3.2.2 网络插件 3.3 网络通信流程 四、Kubernetes…...
C 语言的void*到底是什么?
一、void* 的类型任意性 void* 是一种通用指针类型。它可以指向任意类型的数据。例如,它可以指向一个整数(int)、一个浮点数(float)、一个字符(char)或者一个结构体等。在C语言中,当…...
前端【3】--CSS布局,CSS实现横向布局,盒子模型
盒子分类 1、块级盒子 2、内联级盒子 3、内联块级盒子 4、弹性盒子 5、盒子内部分区 方法一:使用 float 普通盒子实现横向布局 方法二:使用 display: inline-block 内联块级元素实现横向布局 方法三:使用弹性盒子 flexbox࿰…...
JavaEE
一.web开发概述 1.服务器 解释1:服务器是一款软件,可以向其他发送请求,服务器会做出一个响应。可以在服务器中部署文件,让其他人访问。 解释2:也可以把运行服务器软件的计算机称为服务器 2.安装服务器 Tomcat官方…...
C语言之文本加密程序设计
🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 文本加密程序设计 摘要:本文设计了一种文本加密程序,旨在提高信息安…...
Spring-Data-Redis连接模式
Redis可以在各种设置中操作。每个操作模式都需要特定的配置,这些配置将在以下部分中进行解释。 一、Redis 单机模式 最简单的入门方法是将Redis Standalone与单个Redis服务器一起使用, 配置LettuceConnectionFactory或JedisConnectionFactor࿰…...
详细介绍下linux内核的高端地址
在32位系统中,内核空间通常占据1GB,用户空间占3GB,这主要是基于历史原因、内存管理需求和系统安全性考虑。 历史原因:早期的UNIX系统就采用了将内核空间和用户空间分离的设计,在32位系统设计时,延续了这种…...
ThinkPhp项目解决静态资源请求的跨域问题的解决思路
背景:我在前端使用vue语言开发的,请求的后端是用ThinkPhp项目开发的。我vue项目里的请求php接口,自带header参数的跨域问题通过网上查询到的server端配置方法已经解决了。我使用的 是中间件的配置方法: <?php//admin 项目 配…...
通过图形界面展现基于本地知识库构建RAG应用
1. 客户需求 快速完成概念验证(PoC)通过图形界面快速完成演示本地私有数据对比不同模型和成本,决定如何部署 2. 阿里云基于本地知识库构建RAG应用 参考方案: 百炼本地知识库方案 解决方案: FastAPI Gradio Llamaindex qwen-plus 主要三大…...
GCPAAS/DashBoard:完全免费的仪表盘设计,基于Vue+ElementUI+G2Plot+Echarts,开源代码,简单易用!还在等什么呢
嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 GCPAAS/DashBoard,一款基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的仪表盘设计器,具备仪表盘目录管理…...
深度学习笔记——循环神经网络RNN
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的循环神经网络RNN知识点。 文章目录 文本特征提取的方法1. 基础方法1.1 词袋模型(Bag of Words, BOW)工作原…...
【Linux系统编程】—— 深度解析进程等待与终止:系统高效运行的关键
文章目录 进程创建再次认识fork()函数fork()函数返回值 写时拷贝fork常规⽤法以及调用失败的原因 进程终⽌进程终止对应的三种情况进程常⻅退出⽅法_exit函数exit函数return退出 进程等待进程等待的必要性进程等待的⽅法 进程创建 再次认识fork()函数 fork函数初识࿱…...
EPSANet2021笔记
来源: EPSANet: An Efficient Pyramid Squeeze Attention Block on Convolutional Neural Network 相关工作: #注意力机制 #多尺度特征表示 创新点: 贡献: 建立了长距离通道依赖关系有效获取利用不同尺度特征图的空间信息 问…...
CTTSHOW-WEB入门-信息搜集11-20
web11 1. 题目: 2. 解题步骤及思路:本题的flag已经给出,主要考点是考察域名的查询,通过查询有时候也可以得到一些有用的信息。 3. 相关知识点:查询域名可以使用nslookup命令使用方法如下:(windo…...
2025年1月19日(理论力学动静法)
动静法(Dynamic-Static Method)是理论力学中常用的一种分析方法,用来求解多自由度系统的平衡问题,尤其适用于静力学分析和动力学分析之间的转化。动静法通过引入虚拟的动力学效应,将静力学问题转化为一个动力学问题&am…...
iOS 性能优化:实战案例分享
摘要: 本文将深入探讨 iOS 性能优化的重要性,并通过一系列实际开发案例,展示如何解决常见的性能问题,包括内存管理、CPU 性能、网络性能、UI 性能和启动性能等方面的优化,帮助 iOS 开发者打造更流畅、高效的应用程序。…...
基于本地消息表实现分布式事务
假设我们有一个电商系统,包含订单服务和库存服务。当用户下单时,需要在订单服务中创建订单,同时在库存服务中扣减库存。这是一个典型的分布式事务场景,我们需要保证这两个操作要么都成功,要么都失败,以保证数据的最终一致性。 项目结构: 订单服务(Order Service)库存服务(Inv…...
select函数
系统调用 select()可用于执行 I/O 多路复用操作,调用 select()会一直阻塞,直到某一个或多个文件描述符成为就绪态(可以读或写)。其函数原型如下所示: #include <sys/select.h> int select(int nfds, fd_set *re…...
自然语言处理——自注意力机制
一、文字表示方法 在自然语言处理中,如何用数据表示文字是基础问题。独热编码(One-hot Encoding )是一种简单的方法,例如对于 “我”“你”“他”“猫”“狗” 等字,会将其编码为如 “我 [1 0 0 0 0 ……]”“你 [0 …...
C语言初阶--函数
目录 1. 函数是什么? 2. C语言中函数的分类 2.1 库函数 2.2 自定义函数 3. 函数的参数 3.1 实际参数(实参) 3.2 形式参数(形参) 4. 函数调用 4.1 传值调用 4.2 传址调用 练习:写一个函数判断一个…...
探索基于机器学习的信用评分:从数据到洞察
友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...
Ubuntu 24.04 LTS 通过 docker desktop 安装 seafile 搭建个人网盘
准备 Ubuntu 24.04 LTSUbuntu 空闲硬盘挂载Ubuntu 安装 Docker Desktop [我的Ubuntu服务器折腾集](https://blog.csdn.net/jh1513/article/details/145222679。 安装 seafile 参考资料 Docker安装 Seafile OnlyOffice 并配置OnlyOffice到Seafile,实现在线编辑…...
【Golang 面试题】每日 3 题(三十六)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...
Linux虚拟机安装与FinalShell使用:探索Linux世界的便捷之旅
文章目录 软件准备安装 VMware 虚拟机下载CentOS 光盘镜像文件选择适合的 CentOS 版本选择合适的镜像文件 本教程工具版本 第一部分:安装 Linux 虚拟机1. 启动 VMware 并创建新虚拟机2. 默认硬件兼容性设置3. 安装操作系统的设置4. 选择操作系统类型与版本5. 为虚拟…...
leetcode19-删除链表的第n结点
leetcode 19 思路 要删除倒数第n个元素,那么就要找到倒数第n1个元素,那么我们需要两个指针来记录,首先快指针需要先走n1步,然后快慢指针一起进行移动,直到快指针为null的时候,此时慢指针恰好走到倒数第n…...
多学科视角下探索开源Github、Git初步学习
Think 1.Github 作为现今最主流的代码托管平台、协作平台甚至是“社交平台”,本身是闭源的。一方面,它是和大多数开发者连接最紧密的开源阵地,另一方面,拥有传统“黑客精神”的人认为将用户身份绑定这样一个闭源平台上恰恰与…...
新星杯-ESP32智能硬件开发--ESP32的I/O组成-系统中断矩阵
本博文内容导读📕🎉🔥 ESP32开发板的中断矩阵、功能描述与实现、相关API和示例程序进行介绍 ESP32中断矩阵将任一外部中断源单独分配到每个CPU的任一外部中断上,提供了强大的灵活性,能适应不同的应用需求。 ESP32中断主…...
Android 右键后无Java class创建
Android studio 创建java class : 最近几个月用Android studio 开发,因为电脑设置了一个新的用户使用,原来的android studio,打开之前的正常的项目总是报一些奇奇怪怪的错误,就重新安装了最新的版本 问题描述 但是新的android s…...