Python - Python正则表达式
正则表达式(Regular Expression),又称规则表达式。正则表达式(Regular Expression)是一组由字母和符号组成的特殊文本,用于从文本中找出满足特定格式的句子。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
Python 自1.5版本起增加了re 模块
官网文档:正则表达式指南 — Python 3.11.11 文档
re.match
re.match 尝试从字符串的起始位置匹配一个规则,匹配成功就返回match对象,否则返回None。可以使用group()获取匹配成功的字符串
语法:re.match(pattern, string, flags=0)
参数 | 描述 |
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等 |
flags可选标志位
修饰符 | 描述 |
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
group(num) 或 groups() 匹配对象函数来获取匹配表达式
匹配对象方法 | 描述 |
group(num=0) | 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 |
groups() | 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 |
import re'''
re.match 尝试从字符串的起始位置匹配一个规则,匹配成功就返回match对象,否则返回None。可以使用group()获取匹配成功的字符串。
语法:re.match(pattern, string, flags=0)
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。flags可选标志位
修饰符 描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
'''
print('---------re.match()基本用法--------')
str = "Hello World,I am Python!"
# match()无标志位
result = re.match('H', str) # 'P','h'
# 匹配成功使用group方法取出字符串,还区分大小写
# 找不到报错;AttributeError: 'NoneType' object has no attribute 'group'
print(result.group()) # 'H'# match()有标志位
# 忽略大小写
result = re.match('h', str, re.I|re.M)
print(result.group()) # 'H'str = 'Python is the best language in the world'
result = re.match('(.*) is (.*?) .*', str)
print(result) # <re.Match object; span=(0, 40), match='Python is the best language in the world'>
print(result.group()) # Python is the best language in the world
print(result.group(1)) # Python
print(result.group(2)) # the
print(result.groups()) # ('Python', 'the')
一、匹配规则
(一)匹配规则-匹配字符
符号 | 匹配规则 |
.(点) | 匹配任意1个字符除了换行符\n |
[abc ] | 匹配abc中的任意一个字符 |
\d | 匹配一个数字,即0-9 |
\D | 匹配非数字,即不是数字 |
\s | 匹配空白,即空格,tab键 |
\S | 匹配非空白,除空格,tab键之类的 |
\w | 匹配单词字符,即a-z、A-Z、0-9、_ |
\W | 匹配非单词字符 |
'''
常用的匹配规则-匹配字符
符号 匹配规则
.(点) 匹配任意1个字符除了换行符\n
[abc ] 匹配abc中的任意一个字符
\d 匹配一个数字,即0-9
\D 匹配非数字,即不是数字
\s 匹配空白,即空格,tab键
\S 匹配非空白,除空格,tab键之类的
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符
'''
import reprint('--------.(点)--------')
# .(点):匹配任意除换行符\n之外的字符
str = 'aa\nbb'
result = re.match('.', str)
print(result.group()) # a
result = re.match('..', str)
print(result.group()) # aa
# result = re.match('...', str) # AttributeError: 'NoneType' object has no attribute 'group'
# print(result.group())print('--------[ ]--------')
# [ ] :匹配中括号内的任意一个字符
str = 'hello'
result = re.match('[he]',str)
print(result.group()) # h
result = re.match('[eh]',str)
print(result.group()) # h
# result = re.match('[He]',str) # AttributeError: 'NoneType' object has no attribute 'group'
# print(result.group())print('--------\d--------')
# \d :匹配一个数字
str = '123abc'
result = re.match('\d', str)
print(result.group()) # 1
result = re.match('\d\d', str)
print(result.group()) # 12
# str = 'abc123'
# result = re.match('\d', str)
# print(result.group()) # AttributeError: 'NoneType' object has no attribute 'group'print('--------\D--------')
# \D 匹配非数字,即不是数字
str = 'abc123'
result = re.match('\D', str)
print(result.group()) # a
result = re.match('\D\D', str)
print(result.group()) # ab
# str = '123abc'
# result = re.match('\D', str)
# print(result.group()) # AttributeError: 'NoneType' object has no attribute 'group'print('--------\s--------')
# \s:匹配空白字符串
str = ' abc'
result = re.match('\s', str)
print(result.group()) #
str = ' abc'
result = re.match('\s\s', str)
print(result.group()) #
# str = 'abc '
# result = re.match('\s', str)
# print(result.group()) # AttributeError: 'NoneType' object has no attribute 'group'print('--------\S--------')
# \S:匹配非空白字符串
str = 'abc '
result = re.match('\S', str)
print(result.group()) # a
str = 'abc '
result = re.match('\S\S', str)
print(result.group()) # ab
# str = ' abc'
# result = re.match('\S', str)
# print(result.group()) # AttributeError: 'NoneType' object has no attribute 'group'print('--------\w--------')
# \w:匹配单词字符,即a-z、A-Z、0-9、_
str = 'abc'
result = re.match('\w', str)
print(result.group()) # a
str = '_0abc'
result = re.match('\w\w', str)
print(result.group()) # _0
# str = ' abc'
# result = re.match('\w', str)
# print(result.group()) # AttributeError: 'NoneType' object has no attribute 'group'print('--------\W--------')
# \W:非单词字符
str = ' abc'
result = re.match('\W', str)
print(result.group()) # a
str = ' abc'
result = re.match('\W\W', str)
print(result.group()) # ab
# str = 'a_bc'
# result = re.match('\W', str)
# print(result.group()) # AttributeError: 'NoneType' object has no attribute 'group'
(二)匹配规则-字符数量
符号 | 匹配规则 |
* | 匹配前一个字符出现0次或者无限次,即可有可无 |
+ | 匹配前一个字符出现1次或者无限次,即至少有1次 |
\? | 匹配前一个字符出现1次或者0次,即要么有1次,要么没有 |
{m} | 匹配前一个字符出现m次 |
{m,} | 匹配前一个字符至少出现m次 |
{n,m} | 匹配前一个字符出现从n到m次 |
'''
常用的匹配规则-匹配字符数量
符号 匹配规则
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有1次
\? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m} 匹配前一个字符出现m次
{m,} 匹配前一个字符至少出现m次
{n,m} 匹配前一个字符出现从n到m次
'''
import reprint('--------*--------')
# *:匹配前一个字符出现0次或者无限次,即可有可无
str = 'Abc'
result = re.match('[A-Z][A-Z]*', str)
print(result.group()) # A
str = 'Abc'
result = re.match('[A-Z][a-z]*', str)
print(result.group()) # Abc
str = 'Abcdefg'
result = re.match('[A-Z][a-z]*', str)
print(result.group()) # Abcdefgprint('--------+--------')
# + :匹配前一个字符出现1次或者无限次,即至少有1次
# 变量名的语法规则:不能以数字开头,变量名只能包含字母,数字,下划线
pattern = '[a-zA-Z_]+[\w]*'
str = 'name'
result = re.match(pattern, str)
print(result.group()) # A
str = '_12name'
result = re.match(pattern, str)
print(result.group()) # Abc
# str = '22Abcdefg'
# result = re.match(pattern, str)
# print(result.group()) # AttributeError: 'NoneType' object has no attribute 'group'print('--------?--------')
# ?:匹配前一个字符出现1次或者0次,即要么有1次,要么没有
# 匹配0-99的数字
pattern = '[0-9]?[0-9]'
str = '20'
result = re.match(pattern, str)
print(result.group()) # 20
str = '09'
result = re.match(pattern, str)
print(result.group()) # 09
str = '101'
result = re.match(pattern, str)
print(result.group()) # 10print('--------{n,m}--------')
# {n,m} :匹配前一个字符出现从n到m次
# 匹配0-99的数字
pattern = '[0-9]{6,10}@qq.com'
str = '123456@qq.com'
result = re.match(pattern, str)
print(result.group()) # 123456@qq.com
str = '12345678@qq.com'
result = re.match(pattern, str)
print(result.group()) # 12345678@qq.com
# str = '1234567891011@qq.com'
# result = re.match(pattern, str)
# print(result.group()) # AttributeError: 'NoneType' object has no attribute 'group'
str = '1234@qq.com'
result = re.match(pattern, str)
print(result.group()) # AttributeError: 'NoneType' object has no attribute 'group'
(三)匹配规则-原生字符串
Python字符串中\作为转义字符开头,比如\n表示换行,\t表示tab键,为了表示\本身,再加一个\,成为\\形式
'''
Python字符串中\作为转义字符开头,比如\n表示换行,\t表示tab键,为了表示\本身,再加一个\,成为\\形式
'''
import re# mypath = 'D:\py资料\正则表达式\regx.py'
# print(mypath) # SyntaxWarning: invalid escape sequence '\p'mypath = 'D:\\py资料\正则表达式\\regx.py'
print(mypath) # D:\py资料\正则表达式\regx.py# AttributeError: 'NoneType' object has no attribute 'group'
# print(re.match('c:\\a.txt','c:\\a.txt').group())
# 正则中\也表示转义,所以要匹配字符串中的\需要再次转义
print(re.match('c:\\\\a.txt','c:\\a.txt').group()) # c:\a.txt# 正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\"
# r表示原生字符串,即不转义
# 在正则前加r,表示原生字符串,python字符串不转义
print(re.match(r'c:\\a.txt','c:\\a.txt').group()) # c:\a.txt
正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\"
r表示原生字符串,即不转义;在正则前加r,表示原生字符串,python字符串不转义
(四)匹配规则-开头结尾
符号 | 匹配规则 |
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
'''
匹配规则-开头结尾
符号 匹配规则
^ 匹配字符串开头
$ 匹配字符串结尾
'''
import re
from tokenize import group# 匹配163.com的邮箱地址
patter = '[\w]{6,20}@163.com'
print(re.match(patter, 'abc123@163.com').group()) # abc123@163.com
print(re.match(patter, 'abc123@163.comvvsd').group()) # abc123@163.com
# print(re.match(patter, 'abc1@163.com').group()) # AttributeError: 'NoneType' object has no attribute 'group'# 通过$来限定结尾
patter = '[\w]{6,20}@163.com$'
print(re.match(patter, 'abc123@163.com').group()) # abc123@163.com
# print(re.match(patter, 'abc123@163.comvvsd').group()) # AttributeError: 'NoneType' object has no attribute 'group'# 通过^来限定开头
print(re.match('^P.*','Python is langage').group()) # Python is langage
print(re.match('^P\w{5}','Python is langage').group()) # Python
(五)匹配规则-分组匹配
符号 | 匹配规则 |
| | 匹配左右任意一个表达式 |
(ab) | 将括号中字符作为一个分组 |
\num | 引用分组num匹配到的字符串 |
(?P) | 分组起别名 |
(?P=name) | 引用别名为name分组匹配到的字符串 |
'''
匹配规则-分组匹配
符号 匹配规则
| 匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串
'''
import refrom 函数.函数 import resultprint('--------|--------')
#|:匹配左右任意一个表达式
str = '99'
result = re.match('[0-9]?\d', str)
print(result.group()) # 99
str = '99'
result = re.match('[0-9]?\d$|100', str)
print(result.group()) # 99
str = '100'
result = re.match('[0-9]?\d$|100', str)
print(result.group()) # 100print('--------(ab)--------')
#(ab):将括号中字符作为一个分组
str = '0512-12345678'
pattern = '([^-]*)-(\d*)'
result = re.match(pattern, str)
print(result.group()) # 0512-12345678
print(result.group(0)) # 0512-12345678
print(result.group(1)) # 0512
print(result.group(2)) # 12345678print('--------\\num--------')
#\num:引用分组num匹配到的字符串
str = '<div>hello world</div>'
result = re.match('<[a-zA-Z]*>(.*)</[a-zA-Z]*>',str)
print(result.group()) # <div>hello world</div>
print(result.group(0)) # <div>hello world</div>
print(result.group(1)) # hello world
str = '<div>hello world</div>'
result = re.match(r'<([a-zA-Z]*)>.*</\1>',str)
print(result.group()) # <div>hello world</div>
str = '<div><h1>www.baidu.com</h1></div>'
result = re.match(r'<([a-zA-Z]*)>.*</\1>',str)
print(result.group()) # <div><h1>www.baidu.com</h1></div>print('--------(?P)--------')
#(?P):分组起别名
#(?P=name):引用别名为name分组匹配到的字符串
str = '<div><h1>www.baidu.com</h1></div>'
ret = re.match(r'<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>',str)
print(ret.group()) # <div><h1>www.baidu.com</h1></div>
二、re常用方法
(一)re.compile()
compile 将正则表达式模式编译成一个正则表达式对象
reg = re.compile(pattern) result = reg.match(string)
等效于
result = re.match(pattern, string)
使用re.compile()和保存所产生的正则表达式对象重用效率更高
(二)re.search()
search 在全文中匹配一次,匹配到就返回
语法:re.search(pattern, string, flags=0)
函数参数说明:
参数 | 描述 |
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 |
(三)re.findall()
findall 匹配所有返回一个列表,这个方法使用频率较高
语法:findall(string[, pos[, endpos]])
参数说明:
参数 | 描述 |
string | 待匹配的字符串。 |
pos | 可选参数,指定字符串的起始位置,默认为 0。 |
endpos | 可选参数,指定字符串的结束位置,默认为字符串的长度。 |
(四)re.sub()
sub 将匹配到的数据进行替换
语法:sub(pattern, repl, string, count=0, flags=0)
参数说明:
参数 | 描述 |
pattern | 正则中的模式字符串。 |
repl | 替换的字符串,也可为一个函数。 |
string | 要被查找替换的原始字符串。 |
count | 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。 |
flags | 标志位,用于控制正则表达式的匹配方式 |
(五)re.split()
split 根据匹配进行切割字符串,并返回一个列表
语法:split(pattern, string, maxsplit=0, flags=0)
参数说明
参数 | 描述 |
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
maxsplit | 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。 |
flags | 标志位,用于控制正则表达式的匹配方式 |
import re'''
compile:re模块中的编译方法,可以把一个字符串编译成字节码
优点:complie则只需要完成一次转换即可,以后再使用模式对象的话,无需重复转换,而在使用正则表达式进行match的操作时,python会将字符串转为正则表达式对象
compile 将正则表达式模式编译成一个正则表达式对象
reg = re.compile(pattern) result = reg.match(string)
等效于 result = re.match(pattern, string)
使用re.compile()和保存所产生的正则表达式对象重用效率更高
'''
print('---------compile--------')
# compile:将正则表达式模式编译成一个正则表达式对象
resObj = re.compile('\d{4}')
result = resObj.match('123456')
print(result.group()) # 1234print('---------search--------')
# search:在全文中匹配一次,匹配到就返回
result = re.search('bc', 'abcd')
print(result.group()) # bc
result = re.search('祖国', '我爱伟大的祖国,I love China')
print(result.group()) # 祖国print('---------findall--------')
# findall:匹配所有返回一个列表
str = '冬天喜欢在冬湖里冬泳'
result = re.findall('冬.', str)
print(result) # ['冬天', '冬湖', '冬泳']
result = re.search('冬.', str)
print(result.group()) # 冬天print('---------sub--------')
# re.sub 实现目标的搜索和替换
# re.subn 实现目标的搜索和替换 还返回被替换的数量 以元组形式
dataS='Python是很受欢迎的编程语言Python'
pattern='[a-zA-Z]+' #字符集的范围 + 号 代表 前导字符模式出现1次以上
res=re.sub(pattern,'Java',dataS)
resn=re.subn(pattern,'Java',dataS)
print(res) # Java是很受欢迎的编程语言Java
print(resn) # ('Java是很受欢迎的编程语言Java', 2)print('---------split--------')
# re.split:实现分割字符串
data='百度,腾讯,阿里,华为,360'
rs=re.split(',',data)
print(type(rs)) # <class 'list'>
print(rs) # ['百度', '腾讯', '阿里', '华为', '360']
三、贪婪模式与非贪婪模式
Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符,非贪婪则相反,总是尝试匹配尽可能少的字符。
在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪
import re# 贪婪模式(默认的匹配规则):在满足条件的情况下尽可能多的去匹配到数据
rs=re.match('\d{6,9}','111222333')
# print(rs.group())
content='aacbacbc'
pattern=re.compile('a.*b')
result=pattern.search(content)
print('贪婪模式:%s'%result.group())data='小王出生于1997年'
patt='.*(\d{4})年'
print(re.match(patt,data).group(1))# 非贪婪模式:在满足条件的情况下尽可能【少】的去匹配到数据
rs=re.match('\d{6,9}?','111222333')
print(rs.group())content='aacbacbc'
pattern=re.compile('a.*?b') #非贪婪模式匹配
result=pattern.search(content)
print('非贪婪模式:%s'%result.group())
总结
元字符 说明 正确 错误
\d 匹配任意单个数字 2 i、$
\D 匹配非数字 A/a 3
\w 匹配任意单个字母数字下划线 u &
\W 匹配\w之外的任意单个字符 & u
\s 匹配单个空格 x
\S 匹配非空白,除空格,tab键之类 x
\n 匹配换行符
. 匹配任意单个字符【换行符除外】
\num 匹配前面引用的分组多次的重复匹配
正则表达式 说明 正确 错误
A{3} 精准N次匹配 AAA AA|A|AAAA
A{3,} 最少出现n次 AAA A
\d{3,5} 约定出现最少次数和最大次数
\d* 可以出现0次至无限次 相当于{0,}
\d+ 最少出现一次 相当于{1,}
\d? 最多出现一次 相当于{0,1} 1 12定位匹配
正则表达式 说明 正确 错误
^A.* 头匹配 ABC CBA
.*A$ 尾部匹配 CBA ABC
^A.*A$ 全字匹配 ACCA BAAA
字符的范围匹配
正则表达式 说明 正确 错误
A 精准匹配 A a
x|y 匹配左右两边的字符 x/y n
[xyz] 字符集合允许出现集合内任意单个字符 z、x、y c、b
[a-z][A-Z][0-9] 字符范围
[^xyz][^0-9] 取反 集合内字符不允许出现的 0 A y8贪婪模式
在满足条件的情况下尽可能的去匹配多的字符串
实例:111222333 \d{6,8}
数据 :小王出生于1997年 .*\d{4}年 贪婪模式非贪婪模式
在满足条件的情况下尽可能的去匹配少的字符串
实例:111222333 \d{6,8}?
数据 :小王出生于1997年 .*?\d{4}年 贪婪模式
相关文章:
Python - Python正则表达式
正则表达式(Regular Expression),又称规则表达式。正则表达式(Regular Expression)是一组由字母和符号组成的特殊文本,用于从文本中找出满足特定格式的句子。正则表达式通常被用来检索、替换那些符合某个模…...
DeepSeek 指导手册(入门到精通)
第⼀章:准备篇(三分钟上手)1.1 三分钟创建你的 AI 伙伴1.2 认识你的 AI 控制台 第二章:基础对话篇(像交朋友⼀样学交流)2.1 有效提问的五个黄金法则2.2 新手必学魔法指令 第三章:效率飞跃篇&…...
Android adb测试常用命令大全
目录 一、查看最上层成activity名字: 二、查看Activity的任务栈: 三、获取安装包信息 四、性能相关 1、显示CPU信息 : 2、查看CPU使用信息 3、内存信息(meminfo package_name or pid 使用程序的包名或者进程id显示内存信息) 4、电量信…...
【python语言应用】最新全流程Python编程、机器学习与深度学习实践技术应用(帮助你快速了解和入门 Python)
近年来,人工智能领域的飞速发展极大地改变了各个行业的面貌。当前最新的技术动态,如大型语言模型和深度学习技术的发展,展示了深度学习和机器学习技术的强大潜力,成为推动创新和提升竞争力的关键。特别是PyTorch,凭借其…...
在不知道进程的情况下怎么关闭
在不知道具体进程ID(PID)或者进程可能会变动的情况下,关闭MinIO服务器的方法通常依赖于你如何启动MinIO以及你的操作系统环境。以下是一些建议的步骤: 1. 使用系统服务管理工具 如果你将MinIO配置为系统服务(例如在L…...
算力平台 驱动云的使用
驱动云的使用 1 进入官网注册2 上传数据3 上传模型4 创建项目5 开发环境6 停止使用 1 进入官网注册 点击这个进入 可以看到注册之后送十个算力点 如果不训练,仅仅上传数据和模型,那么也是要收费的,因为存储数据要占用驱动云的空间。 2 上…...
高校LabVIEW开发调试中的常见问题
在高校进行LabVIEW开发调试时,常常面临硬件选型不当、方案设计不合理、布线不专业以及人员流动性强等问题。这些问题可能影响项目的进展和质量。本文将总结这些问题,并给出具体的解决方案,帮助学生和团队更高效地开展开发工作。 1. 硬件选…...
数据结构——结构体位域、typedef类型重定义、宏、共用体union、枚举、虚拟内存划分
一、结构体位域 1.1 结构体位域的基础 结构体位域:把结构体字节大小扣到极致的一个类型,以bit单位 格式:struct 位域体名{数据类型 位域名:位域大小;数据类型 位域名:位域大小;...};解析:位域体名:可有可无ÿ…...
git bash删除库中的分支与文件
一、 在 GitHub 上删除非 main 分支的步骤可以分为两部分:首先在本地删除该分支,然后在 GitHub 上删除远程分支。以下是详细的步骤: 1. 删除远程分支(在 GitHub 上删除) 打开 GitHub 仓库页面,进入你的仓…...
连锁收银系统的核心架构与技术选型
在连锁门店的日常运营里,连锁收银系统扮演着极为重要的角色,它不仅承担着交易结算的基础任务,还关联着库存管理、会员服务、数据分析等多个关键环节。一套设计精良的核心架构与合理的技术选型,是保障收银系统高效、稳定运行的基础…...
称呼计算器:智能科技,简化您的计算生活
一款手机应用程序,安卓设备上使用。这款计算器应用以其简洁的界面、实用的功能和良好的用户体验而受到用户的喜爱。 计算器的主要特点包括: 基本计算功能:支持加、减、乘、除等基本运算。 科学计算器模式:提供更高级的数学运算功…...
qt的QMainWindow保存窗口和恢复窗口状态
保存窗口状态 QSettings settings("MyCompany", "MyApp"); // 指定存储的应用信息 settings.setValue("mainWindowState", saveState());saveState() 返回一个 QByteArray,包含 所有停靠窗口和工具栏的状态。QSettings 用于存储数据…...
【mysql】记一次mysql服务挂了后的数据恢复过程
现象 服务器异常,导致mysql服务异常退出,重启后,校验redo log异常 说明 mysql服务是通过docker-compose启动的,serviceName是db磁盘挂载:/var/lib/mysql挂载到本地磁盘/data/mysql 处理过程 备份 查看磁盘挂载列表 docker …...
使用 LangChain 对接硅基流动(SiliconFlow)API:构建一个智能对话系统
文章目录 什么是硅基流动(SiliconFlow)?LangChain 简介在 LangChain 中对接硅基流动步骤 1:安装必要的库步骤 2:设置 API 密钥步骤 3:编写代码代码解析步骤 4:运行代码如何扩展和改进总结 在现代…...
K8s 证书认知(K8s Certificate Awareness)
K8s 证书认知 在谈起 Kubernetes 证书时,总感觉其涵盖的内容繁多,仿佛千头万绪,让人不知该从何处着手阐述。为了更好地理清思路,本文将对相关内容进行系统的梳理和记录。 1、证书及链路关系 Kubeadm部署的集群,K8s …...
iperf
iperf 是一个网络性能测试工具,用于测量TCP和UDP的网络带宽。-c 参数表示客户端模式,用于指定要连接的服务器地址。以下是一些常见的 iperf 客户端命令示例: 基本用法 iperf -c <server_ip> <server_ip>:服务器的IP…...
【FastAPI 使用FastAPI和uvicorn来同时运行HTTP和HTTPS的Python应用程序】
在本文中,我们将介绍如何使用 FastAPI和uvicorn来同时运行HTTP和HTTPS的 Python应用程序。 简介 FastAPI是一个高性能的Web框架,可以用于构建快速、可靠的API。它基于Python的类型提示和异步支持,使得开发者可以轻松地编写出安全且高效的代…...
Windows系统安装搭建悟空crm客户管理系统 教程
1、在安装悟空 CRM 之前,需要确保你的 Windows 系统上已经安装了以下软件: Web 服务器:推荐使用 Apache 或 Nginx,这里以 Nginx 为例。你可以使用集成环境套件如 XAMPP 来简化安装过程,它包含了 Nginx 、MySQL、PHP 等…...
使用API有效率地管理Dynadot域名,清除某一文件夹中域名的默认DNS设置
关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…...
评估多智能体协作网络(MACNET)的性能:COT和AUTOGPT基线方法
评估多智能体协作网络(MACNET)的性能 方法选择:选择COT(思维链,Chain of Thought)、AUTOGPT等作为基线方法。 COT是一种通过在推理过程中生成中间推理步骤,来增强语言模型推理能力的方法,能让模型更好地处理复杂问题,比如在数学问题求解中,展示解题步骤。 AUTOGPT则是…...
(4/100)每日小游戏平台系列
新增一个点击反应速度测试! 点击反应速度测试是一款简单有趣的网页小游戏,旨在测试玩家的反应能力和专注度。通过随机高亮的颜色块,玩家需要快速点击正确的颜色,并在限定时间内挑战自己的反应速度。 📜 游戏规则 游戏开…...
Day42(补)【AI思考】-编译过程中语法分析及递归子程序分析法的系统性解析
文章目录 编译过程中语法分析及递归子程序分析法的系统性解析**一、总览:编译流程中的语法分析****1. 编译过程核心步骤** **二、语法分析的核心任务****1. 核心目标****2. 现实类比** **三、递归子程序分析法的本质****1. 方法分类****2. 递归子程序分析法的运作原…...
AcWing 190. 字串变换 --BFS-双向搜索
已知有两个字串 A, B 及一组字串变换的规则(至多 66 个规则): A1→B1 A2→B2 … 规则的含义为:在 A 中的子串 A1A1 可以变换为 B1、A2 可以变换为 B2…。 例如:A=abcd B=xyz 变换规则为: …...
visual studio导入cmake项目后打开无法删除和回车
通过Cmakelists.txt导入的项目做删除和回车无法响应,需要点击项目,然后选择配置项目就可以了...
【论文笔记】ZeroGS:扩展Spann3R+GS+pose估计
spann3r是利用dust3r做了增量式的点云重建,这里zeroGS在前者的基础上,进行了增量式的GS重建以及进行了pose的联合优化,这是一篇dust3r与GS结合的具有启发意义的工作。 abstract NeRF和3DGS是重建和渲染逼真图像的流行技术。然而,…...
Vue2中常用指令
文章目录 Vue2中常用指令1. v-text 动态渲染纯文本内容1. 作用2. 基本用法3. 示例4. 注意事项 2. v-html 动态渲染 HTML 内容1. 作用2. 基本用法3. 示例4. 注意事项 3. v-bind 动态绑定 HTML 属性1. 作用2. 基本用法3. 示例4. 注意事项5. 绑定class属性的用法6. 绑定style属性的…...
09-轮转数组
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 方法一:使用额外数组 function rotate(nums: number[], k: number): void {const n nums.length;k k % n; // 处理 k 大于数组长度的情况const newNums new A…...
本地Deepseek-r1:7b模型集成到Google网页中对话
本地Deepseek-r1:7b网页对话 基于上一篇本地部署的Deepseek-r1:7b,使用黑窗口对话不方便,现在将本地模型通过插件集成到Google浏览器中 安装Google插件 在Chrome应用商店中搜索page assis 直接添加至Chrome 修改一下语言 RAG设置本地运行的模型&#…...
算法——结合实例了解广度优先搜索(BFS)搜索
一、广度优先搜索初印象 想象一下,你身处一座陌生的城市,想要从当前位置前往某个景点,你打开手机上的地图导航软件,输入目的地后,导航软件会迅速规划出一条最短路线。这背后,就可能运用到了广度优先搜索&am…...
2025年3月营销灵感日历
2025年的第一场营销大战已经拉开帷幕了! 三月可是全年最值钱的营销黄金月——妇女节、植树节、315消费者日三大爆点连击,还有春分、睡眠日、世界诗歌日等20隐藏流量密码。 道叔连夜扒了18个行业数据,整理了这份《2025年3月营销灵感日历》&a…...
【认证授权FAQ】SSL/TLS证书过期导致的CLS认证失败
问题现象 问题分析 属于Agent操作系统的根认证机构过期问题,需要下载CA然后在系统安装。 DigiCert根证书和中间证书将在未来几年过期,一旦证书过期,基于证书颁发的SSL/TLS证书将不再信任,导致网站无法HTTPs访问。需要迁移到新的根…...
飞书专栏-TEE文档
CSDN学院课程连接:https://edu.csdn.net/course/detail/39573...
自己部署 DeepSeek 助力 Vue 开发:打造丝滑的时间线(Timeline )
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 自己…...
机器学习:集成学习和随机森林
集成学习 集成学习通过构建并合并多个模型来完成学习,从而获得比单一学习模型更显著优越的泛化能力,集成学习就是利用模型的"集体智慧",提升预测的准确率,根据单个模型方式,集成学习可分为两大类: 个体之间存在强依赖关系,其代表为Boosting算法个体之间不存在强依赖…...
力扣刷题(数组篇)
日期类 #pragma once#include <iostream> #include <assert.h> using namespace std;class Date { public:// 构造会频繁调用,所以直接放在类里面(类里面的成员函数默认为内联)Date(int year 1, int month 1, int day 1)//构…...
Jenkins 新建配置 Freestyle project 任务 六
Jenkins 新建配置 Freestyle project 任务 六 一、新建任务 在 Jenkins 界面 点击 New Item 点击 Apply 点击 Save 回到任务主界面 二、General 点击左侧 Configure Description:任务描述 勾选 Discard old builds Discard old builds:控制何时…...
5.8 软件质量与软件质量保证
文章目录 软件质量模型软件质量保证 软件质量模型 软件质量模型有ISO/IEC9126,McCall。 ISO/IEC9126从功能性、可靠性、易使用性、效率、可维护性、可移植性这6个方面对软件质量进行分析。功能性包含适合性、依从性、准确性、安全性、互用性。可靠性包含成熟性、容错…...
二次封装axios解决异步通信痛点
为了方便扩展,和增加配置的灵活性,这里将通过封装一个类来实现axios的二次封装,要实现的功能包括: 为请求传入自定义的配置,控制单次请求的不同行为在响应拦截器中对业务逻辑进行处理,根据业务约定的成功数据结构,返回业务数据对响应错误进行处理,配置显示对话框或消息形…...
Flutter项目试水
1基本介绍 本文章在构建您的第一个 Flutter 应用指导下进行实践 可作为项目实践的辅助参考资料 Flutter 是 Google 的界面工具包,用于通过单一代码库针对移动设备、Web 和桌面设备构建应用。在此 Codelab 中,您将构建以下 Flutter 应用。 该应用可以…...
Java 大视界 -- 边缘计算与 Java 大数据协同发展的前景与挑战(85)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
【第1章:深度学习概览——1.2 深度学习与机器学习、传统人工智能的区别与联系】
在科技飞速发展的时代,AI 技术如同一颗璀璨的明星,照亮了我们生活的方方面面。今天,让我们一起深入探寻 AI 技术的演进历程,看看它是如何从最初的简单规则系统,一步步发展成为如今强大的智能技术。 一、开篇故事:三杯咖啡看懂三代 AI 想象一下,你经营着一家充满温馨氛…...
游戏引擎学习第99天
仓库:https://gitee.com/mrxiao_com/2d_game_2 黑板:制作一些光场(Light Field) 当前的目标是为游戏添加光照系统,并已完成了法线映射(normal maps)的管道,但还没有创建可以供这些正常映射采样的光场。为了继续推进&…...
NixHomepage - 简单的个人网站
💻 NixHomepage - 简单的个人网站 推荐下个人的开源项目,演示网站,项目链接 https://github.com/nixgnauhcuy/NixHomepage,喜欢的话可以为我的项目点个 Star~ 📷 预览 ⚙️ 功能特性 多平台适配 明亮/暗黑模式切换 W…...
window patch按块分割矩阵
文章目录 1. excel 示意2. pytorch代码3. window mhsa 1. excel 示意 将一个三维矩阵按照window的大小进行拆分成多块2x2窗口矩阵,具体如下图所示 2. pytorch代码 pytorch源码 import torch import torch.nn as nn import torch.nn.functional as Ftorch.set_p…...
Dockerfile 详解:构建自定义镜像
Dockerfile 是一种文本文件,包含了一系列指令,用于描述如何构建一个 Docker 镜像。通过 Dockerfile,我们可以将应用程序及其所有依赖打包成镜像,确保应用在不同环境中运行时保持一致性。掌握 Dockerfile 的写法和最佳实践,能够帮助我们高效地构建和管理容器镜像。 本文将…...
vue2老版本 npm install 安装失败_安装卡主
vue2老版本 npm install 安装失败_安装卡主 特别说明:vue2老版本安装慢、运行慢,建议升级vue3element plus vite 解决方案1: 第一步、修改npm 镜像为国内镜像 使用淘宝镜像: npm config set registry https://registry.npmmir…...
【细看open_r1】精读训练和评估模型以及生成合成数据的脚本(src/open_r1)
src/open_r1 目录下主要包含了一些用于训练和评估模型以及生成合成数据的Python脚本,下面我们对其中几个主要的Python文件进行深度剖析。 configs.py 这个文件定义了两个数据类 GRPOConfig 和 SFTConfig,它们分别继承自 trl.GRPOConfig 和 trl.SFTConf…...
数据库数据恢复—MongoDB丢失_mdb_catalog.wt文件导致报错的数据恢复案例
MongoDB数据库存储模式为文档数据存储库,存储方式是将文档存储在集合之中。 MongoDB数据库是开源数据库,同时提供具有附加功能的商业版本。 MongoDB中的数据是以键值对(key-value pairs)的形式显示的。在模式设计上,数据库受到的约束更少。这…...
Qt 控件整理 —— 按钮类
一、PushButton 1. 介绍 在Qt中最常见的就是按钮,它的继承关系如下: 2. 常用属性 3. 例子 我们之前写过一个例子,根据上下左右的按钮去操控一个按钮,当时只是做了一些比较粗糙的去演示信号和槽是这么连接的,这次我们…...
当 LSTM 遇上 ARIMA!!
大家好,我是小青 ARIMA 和 LSTM 是两种常用于时间序列预测的模型,各有优劣。 ARIMA 擅长捕捉线性关系,而 LSTM 擅长处理非线性和长时间依赖的关系。将ARIMA 和 LSTM 融合,可以充分发挥它们各自的优势,构建更强大的时…...