python的Re模块学习

本文初步介绍 正则表达式的定义,分类的组成部分。并举例编码


一、什么是正则表达式

答:在unix系统中,用来表示规则的字符串。在开发语言中需要处理大量的字符串,引入了这个规则。

字符串的处理:

1. 过滤字符串,在字符串中获取需要的部分

2. 验证字符的输入是否符合规范, 例如用户名,密码的验证

3. 切割字符串, 划分字符内容

4. 替换字符串, 替换文本内容的信息。

二、正则表达式的分类

目前产雇佣的两大正则系统: POSIX系统, Pcre系统。

开发语言  Perl  --> Pcre

C --> POSIX

PHP --> POSIX, Pcre

Python --> Pcre

三、正则表达式的内容

可以划分为三个部分,原子,元字符和模式修正符

原子:是正则表达式的最小单元。所有的字符都是原子。 包括可见字符: 1-9,a-z,&*等。

不可见字符: \n, \r , \v , \t, \f等

元字符: 原子修饰符。 修饰原子。 可以划分为, 整体修饰,数量修饰,位置修饰和特殊修饰(转义,词边界等)。

模式修正符: 对正则表达式进行一些额外的匹配规则 。

3.1、 原子

原子:正则表达式的最小单元所有的字符都是原子。 包括可见字符: 1-9,a-z,&*等。

不可见字符: \n, \r , \v , \t, \f等。

需要学习的是有 7个专用的转义字符:

原子的转义字符
\d: 表示数字 0-9
\D: 表示除了 数字 0-9 以外的字符
\s :表示任意空白字符(不可见,例如空格,换行。 \n,\r)
\S: 表示除了空白字符以外的 任意字符
\w: 表示a-z,0-9,A-Z,_ 。 即常用的变量名元素
\W:表示除了 [a-z0-9A-Z_] 以外的任意字符
. : 表示除了\n以 的任意字符

import re  # 导入 re模块#### 正则表达式的应用测试步骤
# 1. 定义 正则表达式
# 2. 定义 检查字符
# 3. 检查# 定义表达式的调用 函数
# 方便后续的测试
def run(pattern:str,str1:str):res = re.search(pattern,str1)print(type(res), res)#####################################pattern1 = 'a'
str1 = '13afas'
res = re.search(pattern1,str1)
print(type(res), res)  # <class 're.Match'> <re.Match object; span=(2, 3), match='a'>pattern2 = '\d'   # 0-9 纯数字
str ='abc,123'
res = re.search(pattern2,str)
print(type(res), res) # <class 're.Match'> <re.Match object; span=(4, 5), match='1'>pattern2 = '\D'   # 除了0-9 以外的任意字符
str ='abc,123'
res = re.search(pattern2,str)
print(type(res), res) # <class 're.Match'> <re.Match object; span=(0, 1), match='a'>pattern2 = '\D'   # 除了0-9 以外的任意字符
str ='=bc,123'
res = re.search(pattern2,str)
print(type(res), res) # <class 're.Match'> <re.Match object; span=(0, 1), match='='>pattern2 = '\w'   # 0-9,a-z,A-Z,_  . 即我们常用的变量命名元素
str ='=bc,123'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(1, 2), match='b'>pattern2 = '\w'   # 0-9,a-z,A-Z,_  . 即我们常用的变量命名元素
str ='_bc,123'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(0, 1), match='_'>pattern2 = '\W'   # 除0-9,a-z,A-Z,_ 以外的元字符  
str ='_A1bc,123'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(5, 6), match=','>pattern2 = '\s'   # \s 空白字符, 包括换行, 换行在不同的系统是不一样的。 \n,\r,\v,\f
str ='1 234 abc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(1, 2), match=' '>pattern2 = '\s'   # \s 空白字符, 包括换行, 换行在不同的系统是不一样的。 \n,\r,\v,\fstr ='1234\nabc'run(pattern2,str) # <class 're.Match'> <re.Match object; span=(4, 5), match='\n'>pattern2 = '\s'   # \s 空白字符, 包括换行, 换行在不同的系统是不一样的。 \n,\r,\v,\f
str ='1234\rabc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(4, 5), match='\r'>pattern2 = '\S'   # 空白以外的字符
str ='  1234\nabc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(2, 3), match='1'>pattern2 = '\S'   # 空白以外的字符
str ='\r\v\f\nabc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(4, 5), match='a'>pattern2 = '.'   # 任意字符, 除了换行符 .
str ='abc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(0, 1), match='a'>pattern2 = '.'   # 任意字符, 除了换行符 .
str ='1bc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(0, 1), match='1'>pattern2 = '.'   # 任意字符, 除了换行符 .
str ='_bc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(0, 1), match='_'>pattern2 = '.'   # 任意字符, 除了换行符 .
str ='\nbc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(1, 2), match='b'>

3.2、元字符

原子修饰符。 修饰原子。 可以划分为, 整体修饰,数量修饰,位置修饰和特殊修饰(转义,词边界等

3.2.1 整体修饰:

[] : 原子列表。 将多个原子用 [] 包裹表示,满足里面任意个元素即可。

[^] : 排除 原子列表中的元素。

import re# 定义表达式的调用 函数
# 方便后续的测试
def run(pattern:str,str1:str):res = re.search(pattern,str1)print(type(res), res)patten1 = '[a,b,1,2,A,Z]'
str1 = 'cd1BC'
str2 = 'BCDS'
str3 = 'ab85967'
run(patten1, str1) # <class 're.Match'> <re.Match object; span=(2, 3), match='1'>
run(patten1, str2) # <class 'NoneType'> None
run(patten1, str3) # <class 're.Match'> <re.Match object; span=(0, 1), match='a'>pattern2 = '[^0,1,2]' # 除了 012以外的任意 原子
str1 = '012AZ'
str2 = '01'
str3 = '0'
str4 = '3456789azAZ%'
run(pattern2,str1) # <class 're.Match'> <re.Match object; span=(3, 4), match='A'>
run(pattern2,str2) # <class 'NoneType'> None
run(pattern2,str3) # <class 'NoneType'> None
run(pattern2,str4) # <class 're.Match'> <re.Match object; span=(0, 1), match='3'>

3.2.2 数量修饰

修饰前面那个原子的数量

数量修饰
+ : 表示1个以上的数量, 例如 \d+ 表示1个以上的数字
? :表示0个 或 1个原子。 例如 \d?
* :表示任意数量的原子,包括0
{m} :表示 m个 原子
{m,n}: 表示 m到n个原子, 包含 m和n。 例如 \d{2,5} ,表示 2个到5个数字
{m , }  : 表示m个以上的原子
{ , n} :表示 n个以下的原子

 代码示例:

import re# 定义表达式的调用 函数
# 方便后续的测试
def run(pattern:str,str1:str):res = re.search(pattern,str1)print(type(res), res)##  数量修饰 ,
# 1.1 +, 标识 一个以上
pattern2 = 'a+'   # + 1个以上.
str ='aabc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(0, 2), match='aa'>pattern2 = 'a+'   # + 1个以上.
str ='abc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(0, 1), match='a'>pattern2 = 'ab+'   # + 1个以上. 修饰的是之前那个 元字符, 这里就是 b。  所以结果不是 aaabb, 而是 abb
str ='aaabbc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(2, 5), match='abb'># 1.2: * , 标识 任意数量, 包括0pattern2 = 'a*'   # * 任意数量
str ='aaabbc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(0, 3), match='aaa'>pattern2 = 'a*'   # * 任意数量 , 所以返回的是 match对象,以及其他信息。 而不是none
str ='bbc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(0, 0), match=''># 1.3: {m,n} , 指定数量, 左右的值都包括,即 m,n都包括pattern2 = 'a{2,4}'   #  a的数量是 2-4 个, str有两个 所以符合。
str ='aabbc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(0, 3), match='aaa'>pattern2 = 'a{2,4}'   # a的数量是 2-4 个 , 只有一个所以不符合
str ='abbc'
run(pattern2,str) # <class 'NoneType'> Nonepattern2 = 'a{2,}'   # a的数量是 2 - 无穷大
str ='aaaaaaaaabbc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(0, 9), match='aaaaaaaaa'>pattern2 = 'a{,2}'   # a的数量是 0 - 2个 , 所以返回 match对象,而不是 none
str ='bbc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(0, 0), match=''>

3.2.3 位置修饰符

位置元字符
\A , ^ : 开头位置/起始位置  
\Z,, $   :结尾位置/以xxx结尾  
$^ 和 /Z/A的区别是, $^ 可以匹配多行的字符串。 /Z /A 只能匹配一行字符串。即使有多行的字符串,它也只匹配第一行。
^若在 [] 里面 [^] , 则表示非的意思。 例如[^1,2,3] , 非1,2,3。处理1,2,3以外的任意 原子。

代码示例:

import re# 定义表达式的调用 函数
# 方便后续的测试
def run(pattern:str,str1:str):res = re.search(pattern,str1)print(type(res), res)# 2. 位置修饰符。
# 开头位置/起始位置  \A , ^ , 必须放在最前面pattern2 = '^a{,2}'   # 以a的数量是 0 - 2个开头
str ='aabbc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(0, 2), match='aa'>pattern2 = '\Aa{,2}'   # 以a的数量是 0 - 2个开头
str ='aabbc'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(0, 2), match='aa'>pattern2 = 'a^'   #  ^ 这个必须放在最前面
str ='aabbc'
run(pattern2,str) # <class 'NoneType'> Nonepattern2 = 'a\A'   #   这个必须放在最前面
str ='aabbc'
run(pattern2,str) # <class 'NoneType'> None# 结尾位置/以xxx结尾  \Z, $  
# \Z,$ 必须放在最后面pattern2 = 'a$'   # 以a结尾。 即 最后位置的值必须是a
str ='aabbc'
run(pattern2,str) # <class 'NoneType'> Nonepattern2 = 'a$'   # 以a结尾。 即 最后位置的值必须是a
str ='aabbca'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(5, 6), match='a'>pattern2 = '$a'   # $,\Z 必须放在结尾位置, 所以这里结果是none
str ='aabbca'
run(pattern2,str) # <class 'NoneType'> Nonepattern2 = '\Za'   # $,\Z 必须放在结尾位置, 所以这里结果是none
str ='aabbca'
run(pattern2,str) # <class 'NoneType'> Nonepattern2 = 'a\Z'   # $,\Z 必须放在结尾位置
str ='aabbca'
run(pattern2,str) # <class 're.Match'> <re.Match object; span=(5, 6), match='a'>## \A ^ 和 \Z $ 之间的区别是, ^和$ 可以用于多行
pattern2 = '^a'    # ^ 可以适应 多行匹配。 即第二行有 a开头的字符串, 也能匹配到
str ='''
=-34
abc
124
'''
res = re.search(pattern2,str,re.M)
print(type(res), res) # <class 're.Match'> <re.Match object; span=(5, 6), match='a'>pattern2 = '\Aa'    # \A 只匹配第一行,即使在多行的 re.M 修正下 。 即第二行有 a开头的字符串, 也匹配不到,返回none  
str ='''
=-34
abc
124
'''
res = re.search(pattern2,str,re.M)
print(type(res), res) # <class 'NoneType'> None

3.2.4 特殊修饰符

3.2.4.1 转义修饰符

\ :因为正则表达式有很多 特殊字符 \ , * & ^ 等, 有时候字符串需要 表示他们本身的含义,而不是 转义后的意思。

import re  # 导入 re模块#### 正则表达式的应用测试步骤
# 1. 定义 正则表达式
# 2. 定义 检查字符
# 3. 检查# 定义表达式的调用 函数
# 方便后续的测试
def run(pattern:str,str1:str):res = re.search(pattern,str1)print(type(res), res)########
## 转义修饰
# 因为正则表达式有很多 特殊字符 \ , * & ^ 等, 有时候字符串需要 表示他们本身的含义,而不是 转义后的意思。
# 这时候只要在他们前面价格 转义字符 \ , 就是可以实现。  \. , \*
pattern1 = 'a*'  # 表示 匹配任意数量的a
pattern2 = 'a\*'  # 表示 要匹配 a*
str1 = 'aaaabcd'
run(pattern1, str1)  # <class 're.Match'> <re.Match object; span=(0, 4), match='aaaa'>
run(pattern2, str1)  # <class 'NoneType'> Nonepattern1 = 'a.'  # 表示 a和任意字符
pattern2 = 'a\.'  # 表示 要匹配 a.
str1 = 'aaaabcd'
run(pattern1, str1)  # <class 're.Match'> <re.Match object; span=(0, 2), match='ab'>
run(pattern2, str1)  # <class 'NoneType'> None
3.2.4.2 词边界
词边界
\b : 表示能够当做 英文单词分隔的符号,即除了字母和数字以外的字符。 在字符串的开头需要 加转义: \\b
\B :表示字母和 数字
import re  # 导入 re模块#### 正则表达式的应用测试步骤
# 1. 定义 正则表达式
# 2. 定义 检查字符
# 3. 检查# 定义表达式的调用 函数
# 方便后续的测试
def run(pattern:str,str1:str):res = re.search(pattern,str1)print(type(res), res)########
## 词边界修饰
# \b 需要 加转义\ , \\b
str1 = 'this is my house'
str2 = 'this ismy house'
str3 = 'this is$my house'pattern2 = '\Bmy'
run(pattern2,str1) # <class 'NoneType'> None
run(pattern2,str2) # <class 're.Match'> <re.Match object; span=(7, 9), match='my'>
run(pattern2,str3) # <class 'NoneType'> Nonepattern2 = '\\Bmy'
run(pattern2,str1) # <class 'NoneType'> None
run(pattern2,str2) # <class 're.Match'> <re.Match object; span=(7, 9), match='my'>
run(pattern2,str3) # <class 'NoneType'> Nonepattern2 = '\bmy'
run(pattern2,str1) # <class 'NoneType'> None
run(pattern2,str2) # <class 'NoneType'> None
run(pattern2,str3) # <class 'NoneType'> Nonepattern2 = '\\bmy'  # 需要转义 \ s是的 \b 生效。 不知道为啥\b 必须要加 \ 转义。
run(pattern2,str1) # <class 're.Match'> <re.Match object; span=(8, 10), match='my'>
run(pattern2,str2) # <class 'NoneType'> None
run(pattern2,str3) # <class 're.Match'> <re.Match object; span=(8, 10), match='my'>
 3.2.4.3  修饰关系

| : 表示选择关系 。  例如 ab|cd 。 表示 ab 或 cd。 从左向右 满足其中一个即可

3.2.4.4 ()

1. 表示将多个原子当做一个原子: 通常叫做模式单元或者组

2. 改变表达式的优先级: 例如 ab|cd ,  | 是最后执行的

a(b|c)d, 表示 abd或 acd, 在() 修饰后, | 是先执行的。

import re  # 导入 re模块#### 正则表达式的应用测试步骤
# 1. 定义 正则表达式
# 2. 定义 检查字符
# 3. 检查# 定义表达式的调用 函数
# 方便后续的测试
def run(pattern:str,str1:str):res = re.search(pattern,str1)print(type(res), res)########
## 1. 将多个原子当做一个原子, 称为 模式单元或者 组
pattern2 = 'a|(cs)|cd'  # a 或 cs 或 cd
str1 = 'abc'    # 满足 a
str2 = 'bcs11'  # 满足 cs
str3 = 'bcwc'
run(pattern2,str1) # <class 're.Match'> <re.Match object; span=(0, 1), match='a'>
run(pattern2,str2) # <class 're.Match'> <re.Match object; span=(1, 3), match='cs'>
run(pattern2,str3) # <class 'NoneType'> None## 2. 改变优先级
pattern2 = 'a(b|c)d'  # abd, acd . 若不加() ab|cd, 则是 ab,cd 在 | 。 加了括号改变了优先级, a (b|c) d 一起执行, 也就是 执行了 b|c
str1 = 'abc'    # 满足 a
str2 = 'abd'  # 满足 cs
str3 = 'acd'
run(pattern2,str1) # <class 'NoneType'> None
run(pattern2,str2) # <class 're.Match'> <re.Match object; span=(0, 3), match='abd'>
run(pattern2,str3) # <class 're.Match'> <re.Match object; span=(0, 3), match='acd'>## 3. 将匹配的内存存储到正则对象
## 涉及到后续的 扩展语法 (?:) , 取消单元存储到 对象.  默认存储到对象

3.3、模式修正符

设定额外的规则

模式修正符
re.A,  修正正则模式在 ASCII 编码的环境下
re.U,  修正正则模式在 UNICODE 编码的环境下,python3的默认编码。可以识别汉字
re.S , 修正模式中 . 的含义 。 使得 . 可以包含 \n
re.M , 修正表达式是否使用多行模式。 即能否匹配多行的字符串。通常和 ^ $搭配使用
re.X , 修正表达式使得匹配时,忽视表达式中的空格和注释内容
re.I , ignorecase, 修正表达式,忽视 表达式中的大小写。
import re  # 导入 re模块#### 正则表达式的应用测试步骤
# 1. 定义 正则表达式
# 2. 定义 检查字符
# 3. 检查######## 模式修正符 : 在正则表达式的基础上,设定额外的 规则
## 编码修正 re.A re.U
# re.A 使用 ascii 编码 , re.U 使用unicode编码。
# python3 默认使用 UNICODE编码,可以识别 汉字
pattern1 = r'\w'
str1 = '我is谁,who am 我'
res1 = re.findall(pattern1,str1,re.A)
res2 = re.findall(pattern1,str1,re.U) # unicode 可以识别汉字
print(type(res1),res1) # <class 'list'> ['i', 's', 'w', 'h', 'o', 'a', 'm']
print(type(res2),res2) # <class 'list'> ['我', 'i', 's', '谁', 'w', 'h', 'o', 'a', 'm', '我']## re.S , 修正 .  。  是的 . 包含 \n
pattern1 = r'.'
str1 = '我\n是谁'
res1 = re.findall(pattern1,str1)
res2 = re.findall(pattern1,str1,re.S)
print(type(res1),res1) # <class 'list'> ['我', '是', '谁']
print(type(res2),res2) # <class 'list'> ['我', '\n', '是', '谁']## re.M , 修正模式为 多行模式。 Multi
pattern1 = r'^www'  # 以 www 开头的字符串
str1 = 'www.baidu.com\nwww.google.com\nwww.sougou.com'
res1 = re.findall(pattern1,str1)
res2 = re.findall(pattern1,str1,re.M)  # 开启多行模式, 匹配多个结果
print(type(res1),res1) # <class 'list'> ['www']
print(type(res2),res2) # <class 'list'> ['www', 'www', 'www']## re.X , 修正模式为 匹配时忽略表达式的注释和空格。 verbose
pattern1 = r'www .'  # 表达式含空格
str1 = 'www.baidu.com\nwww.google.com\nwww.sougou.com'
res1 = re.findall(pattern1,str1)
res2 = re.findall(pattern1,str1,re.X)
print(type(res1),res1) # <class 'list'> []
print(type(res2),res2) # <class 'list'> ['www.', 'www.', 'www.']## re.I, 修正模式为 不区分大小写, ignore
pattern1 = r'wWw'  # 表达式含空格
str1 = 'wWw.baidu.com,WWW.google.com,www.sougou.com'
res1 = re.findall(pattern1,str1)
res2 = re.findall(pattern1,str1,re.I) # 忽视大小写, 所有都能匹配到
print(type(res1),res1) # <class 'list'> ['wWw']
print(type(res2),res2) # <class 'list'> ['wWw', 'WWW', 'www']



 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/175439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣101. 对称二叉树

递归 思路&#xff1a; 克隆这棵树&#xff0c;递归比较左右子树互为镜像&#xff1b;终止条件为&#xff1a; 都为nullptr&#xff0c;则返回 true&#xff1b;有一个为 nullptr&#xff0c;则返回 false&#xff1b;&#xff08;形状不一致&#xff09;形状一致情况下&#…

零基础学编程轻松学编程,分享一款中文编程工具,编程构件简介

零基础学编程轻松学编程&#xff0c;分享一款中文编程工具&#xff0c;编程构件简介 中文编程开发语言工具编辑区界面截图如上图。 给大家分享一款中文编程工具 零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#…

数据库应用:Ubuntu 20.04 安装MongoDB

目录 一、理论 1.MongoDB 二、实验 1.Ubuntu 20.04 安装MongoDB 三、问题 1.Ubuntu Linux的apt 包管理器更新安装软件报错 2.Ubuntu20.04安装vim报错 3.Ubuntu20.04如何更换阿里源 4.Ubuntu22.04如何更换阿里源 一、理论 1.MongoDB &#xff08;1&#xff09;概念 …

6、Qt使用Log4Qt日志

一、知识点 1、Log4Qt有三部分 logger&#xff1a;负责捕获日志信息 layout&#xff1a;负责使用不同的样式输出日志 appender&#xff1a;负责输出信息到不同的目的地&#xff0c;比如数据库、文件、控制台等等 2、 日志级别如下&#xff0c;从上往下依次递增 ALL&#xff1a;…

Day34| Leetcode 1005. K 次取反后最大化的数组和 Leetcode 134. 加油站 Leetcode 135. 分发糖果

Leetcode 1005. K 次取反后最大化的数组和 题目链接 1005 K 次取反后最大化的数组和 本题目一开始我认为直接排序&#xff0c;让最小的取反回来就直接结束&#xff0c;我太天真了&#xff0c;一个反例直接猝死&#xff0c;下面上贪心的思路&#xff1a; 本题一共用到了两个贪…

css之svg 制作圆及旋转

1.代码 <template><div class"loading-box"><div class"circle-container"><svg width"75" height"75" class"move-left-to-right"><circle cx"37.5" cy"37.5" r"26&…

高端影像仪:打破微小产品测量局限

在现代工业生产中&#xff0c;影像仪以CCD数位影像为基石&#xff0c;将计算机屏幕测量技术与空间几何运算的能力融为一体&#xff0c;可以用于测量微小产品的各种尺寸和形状&#xff0c;为生产过程中的质量控制提供重要的参考依据。 影像仪产品内置高精度光学电动双倍镜头&am…

什么是动态住宅IP?它有什么用途?

随着网络的迅速发展&#xff0c;许多人对代理IP已经有了比较深刻的认识&#xff0c;并且广泛地运用到了各自的业务中&#xff0c;尤其在跨境的相关业务中表现尤其卓越。对于代理IP的类别&#xff0c;也需要根据自己的业务类型具体选择最合适的&#xff0c;那么今天IPFoxy就给大…

网页设计--第5次课后作业

1、快速学习JavaScript的基本知识第1-10章 JavaScript入门 - 绿叶学习网 2、使用所学的知识完成以下练习。需求如下3个&#xff1a; 1&#xff09;点亮灯泡 2&#xff09;将所有的div标签的标签体内容后面加上&#xff1a; very good 3&#xff09;使所有的复选框呈现被选…

【javaWeb】HTTP协议

HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的应用层协议 HTTP 是一个文本格式的协议. 可以通过 Chrome 开发者工具或者 Fiddler 抓包, 分析 HTTP 请求/响应的细节. 上图是通过Fiddler对访问百度搜索页时抓取的一个http协议的包。 观察抓包结果,可以看到,当前 http…

myAGV 2023 Pi 全新升级!

Introduction 在高速发展的自动化和机器人技术领域&#xff0c;我们的公司一直致力于提供高效、灵活且可靠的轻量级机械臂解决方案。然而&#xff0c;我们也深知&#xff0c;传统的机械臂需要固定在一个地方&#xff0c;这在一定程度上限制了其在空间上的应用范围。为了突破这一…

【论文阅读】ActiveNeRF:通过不确定性估计候选新视图

【论文阅读】ActiveNeRF: Learning where to See with Uncertainty Estimation Abstract1 Introduction3 Background4 NeRF with Uncertainty Estimation5 ActiveNeRF5.1 Prior and Posterior Distribution5.2 Acquisition Function5.3 Optimization and Inference 6 Experimen…

ECharts配置项手册了解及使用

1&#xff1a;点击文档然后选择配置项手册或者&#xff1a;Documentation - Apache ECharts 2&#xff1a;

中间件安全:Weblogic 漏洞.(使用工具可以利用多种类型漏洞)

中间件安全&#xff1a;Weblogic 漏洞.&#xff08;使用工具可以利用多种类型漏洞&#xff09; WebLogic 是美国 Oracle 公司出品的一个 application server&#xff0c;确切的说是一个基于 JAVA EE 架构的中间件&#xff0c;WebLogic 是用于开发、集成、部署和管理大型分布式…

达梦数据库ddl锁等待时间太短?解决方法

在日常工作中&#xff0c;一般不会允许停业务来进行DDL维护操作&#xff0c;因为停止业务的代价会比较高&#xff0c;对于复杂的系统&#xff0c;停机维护更是充满了不可控的隐患和危险。DM数据库可以采用延长锁超时的时间&#xff0c;以及开启快速加列、修改列、删除列提高DDL…

亚信科技AntDB数据库与库瀚存储方案完成兼容性互认证

近日&#xff0c;亚信科技AntDB数据库与苏州库瀚信息科技有限公司自主研发的RISC-V数据库存储解决方案进行了产品兼容测试。经过双方团队的严格测试&#xff0c;亚信科技AntDB数据库与库瀚数据库存储解决方案完全兼容、运行稳定。除高可用性测试外&#xff0c;双方进一步开展TP…

Django二转day01

web应用 cs/bs 架构 # c/s mysql c和s装在同一台机器上 -c链接s&#xff1a; cmd窗口中 mysql -h 127.0.0.1 -P 3306 -uroot -p密码 -网络协议&#xff1a;一般情况&#xff0c;都是软件自定制协议---》基本都是基于TCP # b/s 浏览器--服务端 -咱们写的djan…

基于springboot-“有光”摄影分享网站系统(2023年☆全网唯一)【附源码|数据库|表结构|万字文档(LW)|技术文档|说明文档】

主要功能 前台登录&#xff1a; 注册用户&#xff1a;用户账号、密码、姓名、手机号、身份证号、性别、邮箱 用户&#xff1a; ①首页、公告资讯展示、图片素材展示、活动展示、视频素材展示、查看更多 ②论坛、发布帖子、活动、活动标题、活动类型、公告资讯、公告标题、公告…

C#,数值计算——插值和外推,径向基函数插值(RBF_interp)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 径向基函数插值 /// Object for radial basis function interpolation using n points in dim /// dimensions.Call constructor once, then interp as many times as desir…

2023年亚太杯APMCM数学建模大赛B题玻璃温室小气候调控

2023年亚太杯APMCM数学建模大赛 B题 玻璃温室小气候调控 原题再现 温室作物的产量受各种气候因素的影响&#xff0c;包括温度、湿度和风速[1]。其中&#xff0c;适宜的温度和风速对植物生长至关重要[2]。为了调节玻璃温室内的温度、风速等气候因素&#xff0c;在温室设计中常…