当前位置: 首页 > news >正文

Python re 模块

正则表达式是一种小型、高度专业化的编程语言。适用于任何语言,在 Python 中通过 re 模块实现。正则模式被编译成一系列的字节码,然后由 C 语言编写的匹配引擎执行。给字符串模糊匹配

正则用于匹配字符串,匹配字符串可以完全匹配和模糊匹配:

  • **完全匹配:**普通字符,大多数字符和字母都和自身匹配 re.findall('rose', 'lialrosetom')
  • **模糊匹配:**元字符,不需要完全匹配即能匹配成功 . ^ $ * + ? { } [ ] | ( ) \

元字符

正则可以使用普通字符进行完全匹配,也可以使用元字符进行模糊匹配。正则表达式中所有元字符: . ^ $ * + ? { } [ ] | ( ) \

通配符

正则中用一个点(.)来表示通配符,它可以匹配除换行符(\n)以外任何字符。一个点只能匹配一个字符

>>> re.findall('s..x', 'abshuxijd')	
['shux']

开头结尾

正则中尖角号(^)用于匹配一行字符串的开头,($)用于匹配一行字符串的结尾。必须以匹配对象开头或结尾才能匹配成功,否则匹配失败

>>> re.findall(r'^hello,\d+','hello,123')
['hello,123']
>>> re.findall(r'^hello,\d+','hi hello,123')
[]
>>> re.findall(r'hello,\d+$','hello,123')
['hello,123']
>>> re.findall(r'hello,\d+$','hello,123s')
[]

重复匹配

不管是点(.),还是数字匹配(\d)都只能匹配一个字符或数字。要想匹配多个就要进行重复匹配,正则中能够重复匹配的元字符有:* + ? {}

元字符描述元字符描述
*对星号前面的子表达式匹配重复 [0, ∞] 次+对加号前面的子表达式匹配重复 [1, ∞] 次
对问号前面的子表达式匹配重复 [0,1] 次,非贪婪模式{n}精确匹配 n 个前子表达式

**星号 ***

星号(*)可以对它前面的子表达式重复 0 次 或多次。

# 对 abc 的 c 重复 0 到多次,即可匹配 ab、abc、abcc、abc...
>>> re.findall(r'abc*','ab456abc123abccc')	
['ab', 'abc', 'abccc']

加号 +

加号(+)可以对它前面的子表达式重复 1 次或多次。

>>> re.findall(r'abc+','ab456abc123abccc')			# 即至少有有一个 c
['abc', 'abccc']

问号 ?

问号(?)可以对它前面的子表达式重复 0 次或 1 次。

>>> re.findall(r'abc?','ab456abc123abccc')
['ab', 'abc', 'abc']

大括号 {}

大括号({})可以对它前面的子表达式精确重复几次,它有多重模式:

  • {n} :对它前面的子表达式至少重复 n 次
  • {m, n} :对它前面的子表达式重复 m 到 n 次
  • {0, ∞} :相当于星号(*)
  • {1, ∞} :相当于加号(+)
  • {0, 1} :相当于问号(?)
>>> re.findall(r'abc{3}','ab456abc123abccc')	# c 重复 3 次,匹配到 abccc
['abccc']
>>> re.findall(r'abc{1,3}','ab456abc123abccc')  # 匹配 abc、abccc
['abc', 'abccc']
>>> re.findall(r'abc{1,3}','abc456abcc123abccc')
['abc', 'abcc', 'abccc']

管道符

管道符(|)表示或,a|b 表示 a 或 b。

>>> re.findall(r'a|b', 'abc')
['a', 'b']
>>> re.findall(r'ka|b', 'kahbc')
['ka', 'b']
>>> re.findall(r'ka|b', 'kahc')
['ka']
>>> re.findall(r'ka|b', 'ka|bhc')
['ka', 'b']

字符集

在正则表达式中,中括号([ ] )表示一个字符集,它用来表示一组字符。字符集中除 - ^ \ 有特殊意义外,其他元字符都是普通字符。

  • [mm] :匹配 m 或 n
  • [^mn] :匹配除 m、n 以外的所有字符
>>> re.findall(r'abc[de]','abcd123abce567')
['abcd', 'abce']
>>> re.findall(r'[^de]+','abcd123abce567')
['abc', '123abc', '567']

横杠 -

字符集中横杠(-)用来表示范围,[a-z] 表示 a - z 任意一个字母。

>>> re.findall(r'b[a-z]', 'bs')
['bs']
>>> re.findall(r'[1-9]','12ab45')
['1', '2', '4', '5']
>>> re.findall(r'[1-9]+','12ab45')
['12', '45']
>>> re.findall(r'[A-Za-z0-9]+','12abCD45')
['12abCD45']>>> re.findall(r'\d+@[A-Za-z0-9]+\.[a-z]+','982561639@qq.com')
['982561639@qq.com']

尖角号 ^

尖角号(^)表示非,[^\d] 除数字以外。

>>> re.findall(r'[^\d]+','abc123def')
['abc', 'def']
>>> re.findall('b[^a-z]*', 'bs213')		# s 没有匹配上,匹配停止
['b']

转义字符 \

反斜杠(\)表示对某个字符转义,可以把普通字符变成特殊字符,如:\d

>>> re.findall(r'[\d]+','abc123def456')
['123', '456']

转义字符

转义字符在元字符中是一个比较特殊的存在,在字符集里面、外面都有特殊意义。

  • 反斜杠后面跟元字符去除特殊功能,如:\.,其中这个点变成了普通的点
  • 反斜杠后面跟普通字符实现特殊功能,如:\d,匹配任何十进制数

转义字符 + 普通字符 = 特殊字符

\d匹配任意十进制数,相当于 [0-9]
\D匹配任何非数字字符,相当于 [^0-9]
\s匹配任意空白字符,相当于 [\t\n\r\f\v]
\S匹配任意非空白字符,相当于 [^\t\n\r\f\v]
\w匹配任意字母数字字符,相当于 [a-zA-Z0-9_]
\W匹配任意非字母数字字符,相当于 [^a-zA-Z0-9_]
\b匹配任意一个特殊字符边界,如:空格、&、# 等

\b 在 Python 中本身是有特殊意义的,在匹配时,需要给它转义,或者加上原生字符串 r :

>>> re.findall(r'abc\b','abc123')		# \b 匹配的是特殊字符边界,abc 后面没有空格,匹配失败
[]
>>> re.findall('abc\\b','abc 123')		# abc 后面有空格,匹配成功
['abc']
>>> re.findall(r'abc\b','abc 123')
['abc']
>>> re.findall(r'abc\b','abc#123')
['abc']

给其他字符加上转义字符时:

import re
>>> re.findall('c\l','abc\le')
[]
>>> re.findall('c\\l','abc\le')
[]
>>> re.findall('c\\\\l','abc\le')
['c\\l']
>>> re.findall(r'c\\l','abc\le')
['c\\l']

\w 和 \s 用法示例:

>>> re.findall(r'\w', '12shdk34_')		# 匹配数字字母以及下划线,加上+,匹配多个
['1', '2', 's', 'h', 'd', 'k', '3', '4', '_']
>>> re.findall(r'\w+', '12shdk34_')
['12shdk34_']>>> re.findall(r'\s+', '12 shdk 34_')	# 匹配空白字符
[' ', ' ']

**Tips:**在使用正则的时候,尽量带上原生字符串 r,可以避免不必要的麻烦。

转义字符 + 元字符 = 普通字符

给元字符加上转义字符,元字符就失去了原有的意义,变成了一个普通字符。

>>> re.findall(r'www*', 'www*')
['www']
>>> re.findall(r'www\*', 'www*')	# 要想把 * 也匹配上,就要给 * 转义
['www*']

贪婪与非贪婪

关于重复匹配,正则表达式默认是按照贪婪匹配的方式去匹配,即在符合条件的情况下,尽可能多的去匹配。而非贪婪匹配恰好与之相反。

贪婪匹配:

>>> re.findall(r'abc*','abc123abcc')	# 尽可能多的匹配(* 的范围是 0 或 多次,它取了 多 次)
['abc', 'abcc']
>>> re.findall(r'<.+>','<html><title>Hello World</title></html>')
['<html><title>Hello World</title></html>']

启用非贪婪模式,只需在表示重复的元字符后面加上一个问号(?)即可:

>>> re.findall(r'abc*?','abc123abcc')		# 尽可能少的匹配(* 的范围是 0 或 多次,它取了 0 次)
['ab', 'ab']
>>> re.findall(r'<.+?>','<html><title>Hello World</title></html>')
['<html>', '<title>', '</title>', '</html>']

在贪婪匹配下,(.*)会尽可能多的匹配字符,因此它把 123456 匹配了,只留下了一个 7 给 \d+,最后得到的内容是 7 :

>>> content = 'Hello 1234567 World_This a Regex Demo'
>>> pattern = re.compile(r'^He.*(\d+).*Demo$')
>>> re.findall(pattern,content)
['7']

有时贪婪匹配匹配的结果并不是我们想要的那样,给我们带来了很大不便,这时我们就要使用非贪婪匹配比较合适:

>>> pattern = re.compile(r'^He.*?(\d+).*Demo$')
>>> re.findall(pattern,content)
['1234567']

修饰符

正则可以包含一些可选标志修饰符来控制匹配模式,修饰符被指定为一个可选的标志。

常见修饰符
| 修饰符 | 描述 | 修饰符 | 描述 | | ------ | -------------------------------------------------- | ------ | ---------------------------------------------------------- | | re.I | 使匹配对大小不敏感 | re.L | 使本地化识别(locale-aware)匹配 | | re.M | 多行匹配,影响 ^ 和 $ | re.S | 使 . 匹配包含换行在内的所有字符(即点(.)换行符也能匹配) | | re.U | 根据 Unicode 字符集解析字符。影响 `\w \W \b 和 \B` | reX | 通过给与你更灵活的格式以便你将正则表达式写的更易理解 |

我们知道点(.)可以匹配除换行符以外的所有字符,但是当遇到换行时,就会引发匹配失败:

import re
content = """Hello 1234567 World_This
is a Regex Demo"""
result = re.match(r'^He.*?(\d+).*?Demo$',content)
print(result.group(1))
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-2-bd9088917b1a> in <module>()3 is a Regex Demo"""4 result = re.match(r'^He.*?(\d+).*?Demo$',content)
----> 5 print(result.group(1))AttributeError: 'NoneType' object has no attribute 'group'

之所以会报没有 group 方法,是因为我们使用了点(.)匹配任意字符,但是不能匹配换行符,也就匹配失败。而我们又调用了 group 方法,针对这种情况,我们只需在 match 方法最后添加一个 re.S 的修饰符即可,以便使点(.)能匹配换行:

result = re.match(r'^He.*?(\d+).*?Demo$',content,re.S)1234567

分组

分组优先匹配组里面的内容,也只显示括号里面的。要想全部显示可以在括号前面加上(?:),进行去优先级:

>>> re.findall('www\.(baidu|163)\.com', 'www.baidu.com')
['baidu']# 在分组前面加上  ?:	表示去组的优先级
>>> re.findall('www\.(?:baidu|163)\.com', 'www.baidu.com')
['www.baidu.com']>>> re.findall('(abc)+', 'abcabcabc')
['abc']
>>> re.findall('(?:abc)+', 'abcabcabc')
['abcabcabc']

分组后的结果通过 group() 方法即可取到:

>>> re.match(r'^th.*?(\d+).*?(\d+)','this is 123456 regex 567')
<_sre.SRE_Match object; span=(0, 24), match='this is 123456 regex 567'>
>>> re.match(r'^th.*?(\d+).*?(\d+)','this is 123456 regex 567').group()
'this is 123456 regex 567'
>>> re.match(r'^th.*?(\d+).*?(\d+)','this is 123456 regex 567').group(1)
'123456'
>>> re.match(r'^th.*?(\d+).*?(\d+)','this is 123456 regex 567').group(2)
'567'

另一种分组方式,?P<组名>,通过组名取值,当匹配的结果有很多时,可以这样取值 :

# 另一种分组方式,?P<组名> ,通过组名取值,当匹配的结果有很多时,可以这样取值 
>>> re.search("(?P<name>[a-z]+)", "rose18john20tom22")               
<_sre.SRE_Match object; span=(0, 4), match='rose'>     
>>> re.search("(?P<name>[a-z]+)", "rose18john20tom22").group()
'rose'>>> re.search("(?P<name>[a-z]+)", "rose18john20tom22").group('name')      # 名字分组为 name         'rose'                                                                
>>> re.search("(?P<name>[a-z]+)(?P<age>\d+)", "rose18john20tom22").group('age')    # 名字分组为 age '18'                                              

re 模块常用方法

match 方法

match(patter, string, flags=0) 方法从字符串开始位置匹配,如果匹配成功则返回匹配位置以及 match 对象,否则返回 None。

第一个参数为正则表达式,第二个参数为待匹配的字符串。

>>> re.match('\d', 'rose56')
>>> re.match('\d', '12rose56')
<_sre.SRE_Match object; span=(0, 1), match='1'>
>>> re.match('\d', '12rose56').group()
'1'

search 方法

search(pattern, string, flags=0)方法扫描整个字符串,搜索正则表达式模式匹配的第一个位置,并返回 match 对象。如果没有与之匹配的,则返回 None。正则表达式模式即为匹配规则,需要用原生字符串来写,避免不必要的麻烦。

第一个参数为正则表达式,第二个参数为待匹配的字符串。

>>> re.search(r'abc', 'abc123abc')
<_sre.SRE_Match object; span=(0, 3), match='abc'>	# 返回第一个匹配结果的位置,以及 match 对象

使用 group() 方法可以拿到匹配结果:

>>> result = re.search(r'abc', 'abc123abc')
>>> result.group()
'abc'

使用 span() 方法可以拿到匹配结果范围:

>>> result = re.search(r'abc', 'abc123abc')
>>> result.span()
(0, 3)

split 方法

split(pattern, string, maxsplit=0, flags=0)分割字符串,返回结果存储到列表中,maxsplit 为早打分割次数。

>>> re.split(' ', 'hi hello six')	# 按空格分
['hi', 'hello', 'six']
>>> re.split('[ |]', 'hi hello|six')	# 按空格或 | 分
['hi', 'hello', 'six']
>>> re.split('[ab]', 'abc')		# 先按 a 分(a的左边为空,因此分为 '' 和 'bc'),再按 b 分(b 的左边为空,因此分为 '' 和 'c'
['', '', 'c']

sub 方法

sub(pattern, repl, string, count=0, flags=0) 方法替换原字符串某个文本,第一个参数为正则,第二个为替换成的字符串,第三个为原字符串,第四个为替换次数。并返回替换后的字符串。

>>> re.sub(r'\d+', 'A', 'abcd12df45')
'abcdAdfA'
>>> re.sub(r'\d+', 'A', 'abcd12df45', 1)
'abcdAdf45'

subn() 方法可以返回替换次数:

>>> re.subn(r'\d+', 'A', 'abcd12df45')	
('abcdAdfA', 2)

compile 方法

前面我们都是直接在 re 方法中使用正则,re 模块提供了一个 compile() 方法可以将正则编译成正则对象,以便匹配规则可以重复使用。

pattern = re.compile(r'\d+')

其他方式直接传入正则对象即可:

>>> content = '2018-11-17 17:18'
>>> pattern = re.compile(r'\d{2}:\d{2}')
>>> result = re.findall(pattern,content)
>>> result
['17:18']

finditer 方法

finditer(pattern, string, flags=0) 方法与 findall() 方法类似 ,不同的是前者将匹配结果封装成一个迭代器,而后者将全部匹配结果存为一个列表。

>>> ret = re.finditer('\d+', 'ss123dd456')
>>> next(ret).group()
'123'

findall 方法

search() 方法返回匹配结果的第一个内容,要想获得所有匹配内容。就需要借助 findall(pattern, string, flags=0) 方法,它会搜索整个字符串,并将匹配结果存到一个列表中。若没有匹配成功,则返回一个空列表。

>>> re.findall(r'\d+','12so45ch')
['12', '45']

相关文章:

Python re 模块

正则表达式是一种小型、高度专业化的编程语言。适用于任何语言&#xff0c;在 Python 中通过 re 模块实现。正则模式被编译成一系列的字节码&#xff0c;然后由 C 语言编写的匹配引擎执行。给字符串模糊匹配 正则用于匹配字符串&#xff0c;匹配字符串可以完全匹配和模糊匹配&…...

为什么越来越多的人开始学习大数据

因为根据国内的发展形势&#xff0c;大数据未来的发展前景会非常好&#xff0c;前景好需求高&#xff0c;自然会吸引越来越多的人进入大数据行业 我国市场环境处于急需大数据人才但人才不足的阶段&#xff0c;所以未来大数据领域会有很多的就业机遇。 2022年春季&#xff0c;…...

【C++】C++核心编程(二)---引用

1.基本语法 作用&#xff1a;给变量起别名 语法&#xff1a;数据类型 &别名 原名&#xff08;int &b a&#xff0c;其中别名与原名的数据类型必须一致&#xff09; 注意事项&#xff1a; 引用必须初始化引用在初始化后&#xff0c;就不可以再改变了 代码演示&am…...

原型设计模式

介绍 原型模式 在Java中,原型模式是一种创建型设计模式,它允许通过复制一个现有对象来创建一个新对象,而不是通过创建新的对象来初始化一个对象,原型模式是一种基于克隆的设计模式,通过复制现有对象的数据来创建新的对象. 原型模式需要实现Cloneable接口并重写Object类中的c…...

JVM结构-类加载(类加载子系统,类加载的角色,类加载的过程,类加载器分类,双亲委派机制,类的主/被动使用)

JVM 结构-类加载2.1类加载子系统2.2类加载的角色2.3类加载的过程2.3.1加载2.3.2链接2.3.3初始化2.4类加载器分类2.4.1 引导类加载器2.4.2扩展类加载器2.4.3应用程序类加载器2.5双亲委派机制2.6类的主动/被动使用2.1类加载子系统 类加载器子系统负责从文件系统或者网络中加载 cl…...

vcpkg私有port的创建和使用

1,准备环境: 系统:windows 系统 2, 安装vcpkg 步骤一 :先git clone下载下来vcpkg文件夹 命令:git clone “https://github.com/Microsoft/vcpkg.git” 步骤二:添加vcpkg环境变量 例如下载目录:D:\woker_zj 步骤三:编译vcpkg 操作:双击bootstrap-vcpkg.bat 步骤四: 为…...

LeetCode——203. 移除链表元素

对于初学链表的学者来学&#xff0c;链表是比较困难的&#xff0c;这部分对指针结构体的要求比较高。我们通过练习是掌握知识的重要途经203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09;我们在数组中去除某元素是遍历一遍数组&#xff0c;如果某位置是要去除的元素&a…...

[Java Web]Request对象 | 超1w字带你熟悉Servlet中的request请求

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;输出优质文章 ⭐所属专栏&#xff1a;Java Web ⭐如果觉得文章写的不错&#xff0c;欢迎点个关注&#x1f609;有写的不好的地方也欢迎指正&#xff0c;一同进步&#x1f601; 目录 Reque…...

求一个补码表示数的原始值的三种方式

求一个补码表示数的原始值的三种方式假设 a(10010)2′complement−14a (10010)_{2complement}-14a(10010)2′complement​−14 方式1&#xff0c;通过补码求原始值公式求值&#xff08;see article&#xff09; x−xM−1∗2M−1∑i0M−2xi∗2ix-x_{M-1}*2^{M-1}\sum_{i0}^{M-2…...

【计算机组成原理】

第2章 运算方法和运算器 2.1 数据与文字的表示方法 2.1.1 数据格式 定点数的表示方法 定点纯小数纯小数表示范围定点纯整数定点表示法特点 浮点数的表示方法&#xff1a; 浮点的规格化表示&#xff1a;阶码、尾数、指数、基数IEEE754标准&#xff1a;单精度、双精度浮点数表…...

论文分享:图像识别与隐私安全

1、基于差分隐私框架的频域下人脸识别隐私保护算法Privacy-Preserving Face Recognition with Learnable Privacy Budget in Frequency Domain2、一种基于视觉密码学和可信计算的无密钥依赖的医学图像安全隐私保护框架A Privacy Protection Framework for Medical Image Securi…...

计算机基础小结

目录 ❤ 计算机基础编程 什么是编程语言? 什么是编程? 为什么要学习编程? ❤ 计算机组成原理 控制器 运算器 储存器 内存(主存) 外存 输入设备 输出设备 适配器 总线 机械硬盘 固态硬盘 ❤ 计算机操作系统 什么是操作系统? 什么是文件? 什么是应…...

Linux服务器还有漏洞?建议使用 OpenVAS 日常检查!

几乎每天都会有新的系统漏洞产生&#xff0c;系统管理员经常忙于管理服务器&#xff0c;有时候会忽略一些很明显的安全问题。扫描 Linux 服务器以查找安全问题并不是很简单的事情&#xff0c;所以有时候需要借助于一些专门的工具。 OpenVAS 就是这样一种开源工具&#xff0c;它…...

【Redis】P1 Redis - NoSQL

Redis - NoSQLSQL 与 NoSQL差别一&#xff1a;结构化 与 非结构化差别二&#xff1a;关联性 与 非关联性差别三&#xff1a;规范化查询语句 与 非规范化差别四&#xff1a;事务 与 无事务差别五&#xff1a;磁盘存储 与 内存存储RedisRedis 的安装当前数据库存储主要分为 关系型…...

Angular学习之ControlValueAccessor接口详解

ControlValueAccessor 是什么&#xff1f;为什么需要使用 &#xff1f;下面本篇文章就来带大家了解Angular中的ControlValueAccessor组件接口&#xff0c;希望对大家有所帮助&#xff01; ControlValueAccessor 是什么&#xff1f; 简单来说ControlValueAccessor是一个接口&am…...

【GORM】高级查询方案

【GORM】高级查询方案1.Struct & Map查询为空的情况2.FirstOrInit3.FirstOrCreate4.高级查询1.Struct & Map查询为空的情况 当通过结构体进行查询时&#xff0c;GORM将会只通过非零值字段查询&#xff0c;这意味着如果你的字段值为0&#xff0c;‘’&#xff0c;false…...

MFC 简单使用事件

功能三个按钮,一个静态框,默认值是0,增加减少按钮和退出按钮.增加减少按钮显示在静态框中.退出按钮退出软件.实验事件思路新建三个事件,add事件sub事件quit事件,一个按钮触发一个事件,静态框新建一个线程接受事件做出对应的改变.UI添加的代码就不具体说,具体说下事件的代码,这才…...

华为OD机试题 - 端口合并(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:端口合并题目输入输出示例一输入输出说明示例二输入输出说明示例…...

ECharts数据可视化--常用图表类型

目录 一.柱状图 1.基本柱状图 1.1最简单的柱状图 ​编辑 1.2多系列柱状图 1.3柱状图的样式 &#xff08;1&#xff09;柱条样式 &#xff08;2&#xff09;柱条的宽度和高度 &#xff08;3&#xff09;柱条间距 &#xff08;4&#xff09;为柱条添加背景颜色 ​编辑 2.堆…...

Flutter面试题解析-GridView详解与应用

一、前言Flutter 作为时下最流行的技术之一&#xff0c;凭借其出色的性能以及抹平多端的差异优势&#xff0c;早已引起大批技术爱好者的关注&#xff0c;甚至一些 闲鱼 &#xff0c; 美团 &#xff0c; 腾讯 等大公司均已投入生产使用。虽然目前其生态还没有完全成熟&#xff0…...

最全的论文写作技巧(建议收藏)

近10年来&#xff0c;笔者有幸多次参与教学论文的评审工作&#xff0c;在此&#xff0c;特将教学论文写作的步骤及相关问题整理汇总如下&#xff1a; 一、选定论题 &#xff08;一&#xff09;论题在文中的地位与作用 严格地讲&#xff0c;论文写作是从选定论题开始的。选题…...

面向对象设计模式:设计模式分类(创建型、行为型、结构型)

1. 创建型设计模式 单例模式&#xff1a;https://blog.csdn.net/qq_44992559/article/details/129348686工厂模式&#xff1a;https://blog.csdn.net/qq_44992559/article/details/115222311抽象工厂模式&#xff1a;https://blog.csdn.net/qq_44992559/article/details/12934…...

MySQL数据库迁移

考试系统的数据库一直是在我自己的服务器上面的&#xff0c; 但是最近&#xff0c;自己的服务器马上要过期了&#xff0c;里面的MySQL数据需要迁移出来&#xff0c;放在另外一个服务器上面。百度了几篇教程&#xff0c;也没研究太多&#xff0c;选了一种比较简单的方式进行迁移…...

Docker:关于 Dockerfile 编写优化的一些笔记整理

写在前面 分享一些 Dickerfile 构建镜像优化方式的笔记理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃避方式&#…...

个性化营销:您需要知道的信息

个性化营销在现代企业中风靡一时。我们将剖析您需要了解的有关个性化营销的信息&#xff0c;一起来了解一下吧。 什么是个性化营销&#xff1f; 个性化营销是一种一对一营销形式&#xff0c;它使用实时用户数据和分析来传递品牌信息并针对特定潜在客户。 它与传统营销不同&…...

栈和队列的相互实现

文章目录一、用栈实现队列入队&#xff1a;出队&#xff1a;Java代码实现&#xff1a;二、用队列实现栈入栈&#xff1a;出栈&#xff1a;Java代码实现&#xff1a;附&#xff1a;C版代码1、用栈实现队列2、用队列实现栈栈&#xff08;stack&#xff09;&#xff1a;先进后出&a…...

iTab新标签页重磅更新 |这些功能绝对有你想要的新体验!

01 写在前面 csdn的朋友们&#xff0c;你好哦&#xff0c;我是iTab 插件的独立开发者&#xff0c;今天给大家安利一下我做的这款桌面插件。 首先要告诉大家一个好消息&#xff1a; 最近iTab新标签页被Edge 浏览器商店官方热门&#x1f525;推荐啦。 在此&#xff0c;特别感谢…...

【改机教程】iOS系统去除小黑条,改拍照声、拨号音、键盘音,不用越狱,支持所有机型

大家好&#xff0c;上次给大家分享了几个iOS系统免越狱改机教程 今天带来最新的教程&#xff0c;这次修改利用的是同一个漏洞&#xff0c;由外网大神 tamago 开发&#xff0c;国内大神冷风 进行汉化和优化 可以修改的地方包括 去除底部小黑条 dock栏透明 桌面文件夹透明 桌面…...

Android10开机向导中复用设置中的Wifi界面

很多时候我们需要定制开机向导&#xff0c;在开机向导界面我们一般会实现联网和设置时间等功能&#xff0c;考虑复用与稳定性问题&#xff0c;我们最好复用设置中的WiFi设置和日期设置。但是设置中的wifi设置界面默认是没有下一步按钮的&#xff0c;这会让用户感觉很奇怪。在以…...

川农机械专业小伙转行Java开发,年薪20w

本期学员就业故事&#xff0c;知了姐邀请到一位“特别”的同学&#xff0c;一位从知了堂就业成功近两年的学员再度接受我们的采访。 来自四川农业大学的曾同学&#xff0c;一个本来学机械开挖掘机的粗犷男人&#xff0c;因为不断地努力学习编程&#xff0c;最终成为一个性格闷…...

华为OD机试题 - 打印文件(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:打印文件题目输入输出示例一输入输出示例二输入输出Code代码解析…...

免费常用API大全,程序员必备

淘宝接口 淘宝开放平台 http://open.taobao.com/?spma219a.7395905.1.1.YdFDV6 APISpace 生活常用 今天吃什么&#xff1a;随机返回一顿美味食物&#xff0c;解决你今天吃什么的难题。 星座查询&#xff1a;根据日期或星座名称&#xff0c;查询星座详细信息&#xff0c;包…...

MySQL主从复制,读写分离

目录 一、MySQL主从复制介绍 MySQL复制过程分成三步 二、主库配置master 1、步骤1 2、第二步:重启Mysql服务 3、第三步&#xff1a;登录Mysql数据库&#xff0c;执行下面SQL 4、第四步&#xff1a;登录Mysql数据库&#xff0c;执行下面SQL&#xff0c;记录下结果中File和…...

什么是UEFI签名认证?UEFI签名有什么好处?

为了防御恶意软件攻击&#xff0c;目前市面上所有电脑设备启动时默认开启安全启动(Secure Boot)模式。安全启动(Secure Boot)是UEFI扩展协议定义的安全标准&#xff0c;可以确保设备只使用OEM厂商信任的软件启动。UEFI签名认证就是对运行在 UEFI 系统下的 efi 驱动和通过 UEFI …...

案例14-课程推送页面逻辑整理--vue

目录一级目录二级目录三级目录一、背景介绍二、问题分析问题1&#xff1a;逻辑边界不清晰&#xff0c;封装意识缺乏问题问题2&#xff1a;展示效果上的问题三、解决过程问题一 代码结构混乱问题解决问题二 代码结构混乱问题解决问题三 展示效果上的细微问题四、总结一级目录 二…...

5大GPU厂商共建 | openKylin社区GPU SIG首次例会召开!

3月8日&#xff0c;openKylin社区GPU SIG首次例会以线上形式召开。此次会议由长沙景美集成电路设计有限公司、摩尔线程智能科技&#xff08;北京&#xff09;有限责任公司、格兰菲智能科技有限公司、象帝先计算技术&#xff08;重庆&#xff09;有限公司等GPU厂商的多位SIG Mai…...

SpringBoot读取配置文件

目录一、简介1、SpringBoot 中常用读取配置方法2、 ConfigurationProperties和Value的区别二、使用 ConfigurationProperties 读取配置三、使用 Value 读取配置一、简介 在日常开发使用 SpringBoot 框架时&#xff0c;经常有一些配置信息需要放置到配置文件中&#xff0c;我们…...

51驱动NRF24L01通信,NRF24L01与TTL转NRF24L01模块通信

51驱动NRF24L01通信&#xff0c;NRF24L01与TTL转NRF24L01模块通信NRF24L01一、简介二、引脚功能描述程序设计一、对 24L01 的程序编程的基本思路如下&#xff1a;二、Tx 与 Rx 的配置过程1、Tx 模式初始化过程&#xff1a;2、Rx 模式初始化过程&#xff1a;三、基本程序函数通信…...

C++友元

欢迎来观看温柔了岁月.c的博客 目前 设有C学习专栏 C语言项目专栏 数据结构与算法专栏 目前主要更新C学习专栏&#xff0c;C语言项目专栏不定时更新 待C专栏完毕&#xff0c;会陆续更新C项目专栏和数据结构与算法专栏 一周主要三更&#xff0c;星期三&#xff0c;星期五&#x…...

MySQL内置函数

文章目录日期函数字符串函数数学函数其他函数日期函数 获取年月日&#xff1a; mysql> select current_date(); ---------------- | current_date() | ---------------- | 2023-02-01 | ---------------- 1 row in set (0.00 sec)获得时分秒&#xff1a; mysql> se…...

mysql数据库之innodb存储引擎架构之内存架构

一、逻辑存储结构 mysql5.5版本开始&#xff0c;默认使用innodb存储引擎&#xff0c;它擅长事务处理&#xff0c;具有崩溃恢复特性&#xff0c;在日常开发中使用非常广泛。 架构图&#xff08;左侧为内存架构&#xff0c;右侧为磁盘架构&#xff09; 二、 内存架构。 1、缓冲…...

Vue:(三十五)路由vue-router

今天&#xff0c;我们开始学习vue中一个很关键的知识点&#xff0c;路由。理解vue的一个插件库&#xff0c;专门用来实现SPA应用单页web应用整个应用只有一个完整的页面点击页面中的导航连接不会刷新页面&#xff0c;只会做页面的局部更新数据需要通过ajax请求获取下来&#xf…...

Dynabook笔记本电脑无法开机怎么重装新系统?

Dynabook笔记本电脑无法开机怎么重装新系统&#xff1f;有用户使用Dynabook笔记本电脑出现了无法正常开机的情况。遇到这样的问题是我们的电脑系统出现了损坏&#xff0c;可以尝试进行系统修复。如果无法修复的话&#xff0c;就需要进行系统重装了。以下为大家带来Dynabook笔记…...

React Native基础知识点

1、组件 与react编写web应用不同&#xff0c;不是使用div、span等标签。而是使用RN官方提供的组件&#xff0c;如View、Text等组件来搭建页面 2、宽高 React Native 中的尺寸都是无单位的&#xff0c;表示的是与设备像素密度无关的逻辑像素点。默认值为auto <View style{{…...

nginx 平滑升级

背景介绍 因为一些原因&#xff0c;比如说 Nginx 发现漏洞、应用一些新的模块等等&#xff0c;想对 Nginx 的版本进行更新&#xff0c;最简单的做法就是停止当前的 Nginx 服务&#xff0c;然后开启新的 Nginx 服务。但是这样会导致在一段时间内&#xff0c;用户是无法访问服务…...

数据结构——链表OJ题目讲解(2)

作者&#xff1a;几冬雪来 时间&#xff1a;2023年3月10日 内容&#xff1a;数据结构链表OJ题目讲解 来源&#xff1a;牛客网和力扣 目录 前言&#xff1a; 刷题&#xff1a; 1.反转链表&#xff1a; 1.改变指向的解法&#xff1a; 2.取头结点插入到新链表&#xff1a; …...

GitHub上线重量级分布式事务笔记,再也不怕面试官问分布式了

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说&#xff0c;就是一次大的操作由不同的小操作组成&#xff0c;这些小的操作分布在不同的服务器上&#xff0c;且属于不同的应用&#xff0c;分布式…...

C++语法规则1(C++面向对象 )

C面向对象 面向对象的三大特征是继承&#xff0c;多态和封装&#xff0c;C重面向对象重要的就是这些&#xff0c;我们下面通过一些简单的实例加以理解&#xff0c;从这小节开始&#xff0c;我们将开启新的编程旅途。与 C 语言编程的思想完全不同了&#xff0c;这就是 C!理解概…...

Web漏洞-CSRF漏洞

CSRF漏洞介绍&#xff1a;CSRF&#xff08;Cross-Site Request Forgery&#xff09;&#xff0c;中文名称&#xff1a;跨站请求伪造&#xff0c;是一种劫持用户在当前已登录的Web应用程序上执行非本意操作一种攻击.原理&#xff1a;攻击者利用目标用户的身份&#xff0c;执行某…...

Python3-面向对象

Python3 面向对象 Python从设计之初就已经是一门面向对象的语言&#xff0c;正因为如此&#xff0c;在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言&#xff0c;那你可能需要先了解一些面向对象…...