Python使用正则表达式

news2024/11/25 9:21:54
  • 正则表达式(Regular Expression),又称规则表达式,是一个计算机科学的概念,通常被用来检索和替换符合某些规则的文本。

1. 正则表达式语法

  • 正则表达式就是记录文本规则的代码。

1. 行定位符

  • 行定位符就是用来描述字符串的边界。“^”表示行的开始,“$”表示行的结尾。
^tm     # 表示匹配行头为“tm”的字符串。
# tm equal Tomorrow Moon匹配,Tomorrow Moon equal tm不匹配。
tm$     # 匹配以“tm”为行尾的字符串。
# tm equal Tomorrow Moon不匹配,Tomorrow Moon equal tm匹配。
tm     # 匹配任意位置出现了“tm”的字符串
# tm equal Tomorrow Moon匹配,Tomorrow Moon equal tm匹配。

2. 元字符

\bmr\w*\b     # 匹配以字母mr开头的单词,先是从某个单词开始处(\b),然后匹配字母mr,接着是任意数量的字母或数字(\w*),最后是单词结束处(\b)。
# 该表达式可以匹配“mrsoft”、“mrbook”、“mr123456”等。

常用元字符

代码说明
.匹配除换行符以外的任意字符。
\w匹配字母或数字或下划线或汉字。
\s匹配任意的空白符。
\d匹配数字。
\b匹配单词的开始或结束。
^匹配字符串的开始。
$匹配字符串的结束。

3. 重复

  • “\w*”用于匹配任意数量的字母或数字。如果想匹配特定数量的数字,如何表示呢?正则表达式为我们提供了限定符(指定数量的字符)来实现该功能。
^\d{8}$       # 匹配8位QQ号

常用限定符

限定符说明举例
?匹配前面的字符0次或1次。colou?r,该表达式可以匹配colour和color。
+匹配前面的字符1次或多次。go+gle,该表达式可以匹配的范围从gogle到goo…gle。
*匹配前面的字符0次或多次。go*gle,该表达式可以匹配的范围从ggle到goo…gle。
{n}匹配前面的字符最少n次。go{2}gle,该表达式只匹配google。
{n,}匹配前面的字符最少n次。go{2,}gle,该表达式可以匹配的范围从google到goo…gle。
{n,m}匹配前面的字符最少n次,最多m次。employe{0, 2},该表达式可以匹配employ、employe和employee共3种情况。

4. 字符类

  • 正则表达式查找数字或字母是很简单的,因为已经有了这些字符集合的元字符(如\d、\w),但是如果要匹配没有预定义元字符的字符集合(比如元音字母a, e, i, o,u),应该怎么办?
  • 很简单,只需要在方括号里列出它们就行了,像[aeiou]就匹配任何一个英文元音字母,[.?!]匹配标点符号“.”、“?”或“!”。也可以轻松地指定一个字符范围,像[0-9]代表的含义与\d就是完全一致的:代表一位数字;同理,[a-z0-9A-Z_]也完全等同于\w(如果只考虑英文的话)。
  • 想要匹配给定字符串中任意一个汉字,可以使用[\u4e00-\u9fa5];如果要匹配连续多个汉字,可以使用[\u4e00-\u9fa5]+。

5. 排除字符

  • 上一节是匹配符合指定字符集合的字符串。现在反过来,匹配不符合指定字符集合的字符串。正则表达式提供了“^”字符。这个元字符在前面出现过,表示行的开始,在这里将会放到方括号中,表示排除的意思。
[^a-zA-Z]    # 匹配一个不是字母的字符

6. 选择字符

  • 试想一下,如何匹配身份证号码呢?首先需要了解一下身份证号码的规则。身份证号码长度为15位或18位。如果是15位,则全为数字;如果是18位,前17位是数字,最后一位是校验位,可能是数字或字符X。
  • 上面描述中,包含着条件选择的逻辑,这就需要使用选择字符(|)来实现。该字符可以理解为“或”,匹配身份证的表达式可以写成如下:
(^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$  # 该表达式的意思是可匹配15位数字,或者18位数字,或者17位数字和最后一位,最后一位可以是数字或者X或者x。

7. 转义字符

  • 正则表达式中的转义字符(\)和Python中的大同小异,都是将特殊字符(如“.”、“?”、“\”等)变为普通的字符。举一个IP地址的实例,用正则表达式匹配如127.0.0.1这样格式的IP地址。如果直接使用点字符,格式为:
[1-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
  • 上面这种显然是不对的,因为“.”可以匹配一个任意字符。这时,不仅是127.0.0.1这样的IP,连127101011这样的字符串也会被匹配出来。所以在使用“.”时,需要使用转义字符(\)。修改后的正则表达式如下:
[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
  • 括号在正则表达式中也算是一个元字符。

8. 分组

  • 通过上面第6个例子,我们已经对小括号的作用有一定的了解了。小括号字符的第一个作用就是可以改变限定符的作用范围,如“|”、“*”、“^”等。
(thir|four)th   # 该表达式的含义是匹配单词thirth或fourth,如果不使用小括号,那么就变成了匹配单词thir和fourth了。
  • 小括号的第二个作用是分组,也就是子表达式。例如(.[0-9]{1,3}){3},就是对分组([0-9]{1,3})进行重复操作。

9. 在Python中使用正则表达式语法

  • 在Python中使用正则表达式时,是将其作为模式字符串使用的。例如,将匹配不是字母的一个字符的正则表达式表示为模式字符串,可以使用下面的代码:
'[^a-zA-Z]'
  • 如果将匹配以字母m开头的单词的正则表达式转换为模式字符串,则不能直接在其两侧添加引号定界符,例如,下面的代码是不正确的:
'\bm\w*\b'
  • 需要将其中的“\”进行转义,转换后的代码为:
'\\bm\\w*\\b'
  • 由于模式字符串可能包括大量的特殊字符和反斜杠,所以需要写为原生字符串,即在模式字符串前加r或R。例如,上面的模式字符串采用原生字符串表示就是:
r'\bm\w*\b'
  • 在编写模式字符串时,并不是所有的反斜杠都需要进行转换。例如,前面编写到的正则表达式“^\d{8}$”中的反斜杠就不需要转义,因为其中的\d并没有特殊的意义。不过,为了编写方便,自己所写的正则表达式建议都采用原生字符串表示。

2. 使用re模块实现正则表达式操作

  • 前面介绍了正则表达式的语法,下面将介绍如何在Python中使用正则表达式。Python提供了re模块,用于实现正则表达式的操作。在实现时,可以使用re模块提供的方法(如search()、match()、findall()等)进行字符串的处理,也可以先使用re模块的compile()方法将模式字符串转换为正则表达式对象,然后再使用该正则表达式对象的相关方法来操作字符串。
  • re模块在使用时,需要用import语句引入:
import re
  • 如果使用的时候没有引入,会抛出模块未定义的异常:
    在这里插入图片描述

1. 匹配字符串

  • 匹配字符串可以使用re模块提供的match()、search()、findall()等方法。

1. 使用match()方法进行匹配

  • match()方法用于从字符串的开始处进行匹配,如果在其实位置匹配成功,则返回Match对象,否则返回None。语法如下:
re.match(pattern,string,[flags])
# pattern:表示模式字符串,由要匹配的正则表达式转换而来。
# string:表示要匹配的字符串。
# flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。常用的标志如下表所示。
标志说明
A或ASCII对于\w、\W、\b、\B、\d、\D、\s和\S只进行ASCII匹配(仅适用于Python3.x)。
I或IGNORECASE执行不区分字母大小写的匹配。
M或MULTILINE将^和$用于包括整个字符串的开始和结尾的每一行(默认情况下,仅适用于整个字符串的开始和结尾处)。
S或DOTALL使用“.”字符串匹配所有字符,包括换行符。
X或VERBOSE忽略模式字符串中未转义的空格和注释。

示例一

  • 例如匹配字符串是否以“mr_”开头,不区分字母大小写:
import re

pattern = r'mr_\w+'     # 模式字符串
string = 'MR_SHOP mr_shop'     # 要匹配的字符串
match = re.match(pattern, string, re.I)    # 匹配字符串,不区分大小写
print(match)
string = "项目名称 MR_SHOP mr_shop"
match = re.match(pattern, string, re.I)   # 匹配字符串,不区分大小写
print(match)    # 输出匹配结果
  • 执行结果如下:
<re.Match object; span=(0, 7), match='MR_SHOP'>
None
  • 字符串“MR_SHOP”是以“mr_”开头,所以返回一个Match对象,而字符串“项目名称MR_SHOP”不是以“mr_”开头,所以返回None。这是因为match()方法从字符串的开始位置开始匹配,当第一个字母不符合条件时,则不再进行匹配,直接返回None。
  • Match对象中包含了匹配值的位置和匹配数据。其中,要获取匹配值的起始位置可以使用Match对象的start()方法;要获取匹配值的结束位置可以使用end()方法;通过span()方法可以返回匹配位置的元组;通过string属性可以获取要匹配的字符串
import re

pattern = r'mr_\w+'     # 模式字符串
string = 'MR_SHOP mr_shop'    # 要匹配的字符串
match = re.match(pattern, string, re.I)    # 匹配字符串,不区分大小写
print('匹配值的起始位置:', match.start())
print('匹配值的结束位置:', match.end())
print('匹配位置的元组:', match.span())
print('要匹配的字符串', match.string)
print('匹配数据:', match.group())
  • 运行结果:
匹配值的起始位置: 0
匹配值的结束位置: 7
匹配位置的元组: (0, 7)
要匹配的字符串 MR_SHOP mr_shop
匹配数据: MR_SHOP

示例二

  • 验证输入的手机号是否合法。
import re

pattern = r'(13[4-9]\d{8})$|(15[01289]\d{8})$'
mobile = '13634222222'
match = re.match(pattern, mobile)     # 进行模式匹配
if match is None:     # 判断是否为None,为真表示匹配失败
    print(mobile, '不是有效的中国移动手机号码。')
else:
    print(mobile, "是有效的中国移动手机号码。")
mobile = '13144222221'
match = re.match(pattern, mobile)    # 进行模式匹配
if match is None:     # 判断是否为None,为真表示匹配失败
    print(mobile, "不是有效的中国移动手机号码。")
else:
    print(mobile, "是有效的中国移动手机号码。")
  • 运行结果:
13634222222 是有效的中国移动手机号码。
13144222221 不是有效的中国移动手机号码。

2. 使用search()方法进行匹配

  • search()方法用于在整个字符串中搜索第一个匹配的值,如果在起始位置匹配成功,则返回Match对象,否则返回None,语法格式如下:
re.search(pattern, string, [flags])
# pattern:表示模式字符串,由要匹配的正则表达式转换而来。
# string:表示要匹配的字符串。
# flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。

示例一

  • 搜索第一个以“mr_”开头的字符串,不区分字母大小写。
import re

pattern = r'mr_\w+'     # 模式字符串
string = 'MR_SHOP mr_shop'     # 要匹配的字符串
match = re.search(pattern, string, re.I)    # 搜索字符串,不区分大小写
print(match)    # 输出匹配结果
string = '项目名称 MR_SHOP mr_shop'
match = re.search(pattern, string, re.I)    # 搜索字符串,不区分大小写
print(match)   # 输出匹配结果
  • 运行结果如下:
<re.Match object; span=(0, 7), match='MR_SHOP'>
<re.Match object; span=(5, 12), match='MR_SHOP'>
  • 从上面的运行结果可以看出,search()方法不仅是在字符串的起始位置搜索,其他位置有符合的匹配也可以。

示例二

  • 验证是否出现危险字符。
import re     # re模块

pattern = r'(黑客)|(抓包)|(监听)|(Trojan)'     # 模式字符串
about = '我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。'
match = re.search(pattern, about)   # 进行模式匹配
if match is None:
    print(about, '@ 安全!')
else:
    print(about, '@ 出现了危险词汇!')
about = '我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。'
match = re.match(pattern, about)    # 进行模式匹配
if match is None:     # 判断是否为None,为真表示匹配失败
    print(about, '@ 安全!')
else:
    print(about, '@ 出现了危险词汇!')
  • 运行结果如下:
我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。 @ 出现了危险词汇!
我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。 @ 安全!

3. 使用findall()方法进行匹配

  • findall()方法用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。如果匹配成功,则返回包含匹配结构的列表,否则返回空列表。
  • 语法如下:
re.findall(pattern, string, [flags])
# pattern:表示模式字符串,由要匹配的正则表达式转换而来。
# string:表示要匹配的字符串。
# flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。

示例一

  • 搜索以“mr_”开头的字符串:
import re

pattern = r'mr_\w+'     # 模式字符串
string = 'MR_SHOP mr_shop'    # 要匹配的字符串
match = re.findall(pattern, string, re.I)    # 搜索字符串,不区分大小写
print(match)
string = '项目名称 MR_SHOP mr_shop'
match = re.findall(pattern, string)     # 搜索字符串,区分大小写
print(match)    # 输出匹配结果
  • 运行结果:
['MR_SHOP', 'mr_shop']
['mr_shop']

示例二

  • 如果在指定的模式字符传中包含分组,则返回与分组匹配的文本列表。
import re
pattern = r'[1-9]{1,3}(\.[0-9]{1,3}){3}'   # 模式字符串
str1 = '127.0.0.1 192.168.1.66'    # 要匹配的字符串
match = re.findall(pattern, str1)    # 进行模式匹配
print(match)
  • 执行的结果如下:
['.1', '.66']
  • 从上面的结果可以看出,并没有得到匹配的IP地址,这是因为在模式字符串中出现了分组,所以得到的结果是根据分组进行匹配的结果,即“(.[0-9]{1,3})”匹配的结果。如果想获取整个模式字符串的匹配,可以将整个模式字符串使用一对小括号进行分组。然后在获取结果时,只取返回值列表的每个元素(是一个元组)的第1个元素。
import re
pattern = r'([1-9]{1,3}(\.[0-9]{1,3}){3})'    # 模式字符串
str1 = '127.0.0.1 192.168.1.66'    # 要匹配的字符串
match = re.findall(pattern, str1)     # 进行模式匹配
for item in match:
    print(item[0])
  • 运行的结果如下:
127.0.0.1
192.168.1.66

2. 替换字符串——sub()方法

  • sub()方法用于实现字符串替换。语法格式如下:
re.sub(pattern,  repl, string, count, flags)
# pattern:表示模式字符串,由要匹配的正则表达式转换而来。
# repl:表示替换的字符串。
# string:表示要被查找替换的原始字符串。
# count:可选参数,表示模式匹配后替换的最大次数,默认值为0,表示替换所有的匹配。
# flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。

示例一

  • 隐藏中奖信息中的手机号码:
import re
pattern = r'1[34578]\d{9}'     # 定义要替换的模式字符串
string = '中奖号码为:84978981 电话为:13611111111'
result = re.sub(pattern, '1XXXXXXXXXX', string)    # 替换字符串
print(result)
  • 运行结果如下:
中奖号码为:84978981 电话为:1XXXXXXXXXX

示例二

  • 替换出现的危险字符串:
import re
pattern = r'(黑客)|(抓包)|(监听)|(Trojan)'    # 模式字符串
about = "我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。"
sub = re.sub(pattern, '@_@', about)    # 进行模式替换
print(sub)
about = '我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。'
sub = re.sub(pattern, '@_@', about)    # 进行模式替换
print(sub)
  • 运行结果如下:
我是一名程序员,我喜欢看@_@方面的图书,想研究一下@_@。
我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。

3. 使用正则表达式分割字符串——split()方法

  • split()方法用于实现根据正则表达式分割字符串,并以列表的形式返回。其作用与字符串对象的split()方法类似,所不同的就是分割字符串由模式字符串指定。语法格式如下:
r.split(pattern, string, [maxsplit], [flags])
# pattern:表示模式字符串,由要匹配的正则表达式转换而来。
# string:表示要匹配的字符串。
# maxsplit:可选参数,表示最大的拆分次数。
# flags:可选参数,表示标志位,用于控制匹配方式,如是否区分大小写字母。

示例一

  • 从给定的URL地址中提取出请求地址和各个参数:
import re

pattern = r'[?|&]'    # 定义分隔符
url = 'http://www.mingrisoft.com/login.jsp?username="mr"&pwd="mrsoft"'
result = re.split(pattern, url)    # 分割字符串
print(result)
  • 运行结果如下:
['http://www.mingrisoft.com/login.jsp', 'username="mr"', 'pwd="mrsoft"']
  • 场景模拟:微博的@好友栏目中,输入“@明日科技 @扎克伯格 @盖茨”(好友名称之间用一个空格区分),即可以同时@三个好友。

示例二

  • 输出被@的好友名称。
import re

str1 = '@明日科技 @扎克伯格 @盖茨'
pattern = r'\s*@'
list1 = re.split(pattern, str1)    # 用空格和@或单独的@分割字符串
print('您@的好友有:')
for item in list1:
    if item != '':     # 输出不为空的元素
        print(item)    # 输出每个好友名
  • 运行结果:
您@的好友有:
明日科技
扎克伯格
盖茨

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

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

相关文章

【STM32G431RBTx】备战蓝桥杯嵌入式→决赛试题→第十二届

文章目录 前言一、题目二、模块初始化三、代码实现interrupt.h:interrupt.c:main.h:main.c: 四、完成效果五、总结 前言 无 一、题目 二、模块初始化 1.LCD这里不用配置&#xff0c;直接使用提供的资源包就行 2.ADC:开启ADCsingle-ended 3.LED:开启PC8-15,PD2输出模式就行了…

MySQL高级(InnoDB引擎)

&#xff08;一&#xff09;逻辑存储结构 表空间&#xff08;ibd文件&#xff09;&#xff0c;会生成ibd文件&#xff0c;一个mysql实例可以对应多个表空间&#xff0c;用于存储记录、索引等数据。 段&#xff0c;分为数据段&#xff08;Leaf node segment&#xff09;、索引段…

学弟研一,有几篇SCI论文,做过前端,读博 or 走开发进国企?

同学你好&#xff0c;在正面先抛开选择就业的方面的问题&#xff0c;其实我觉得生活种的很多选择&#xff0c;都可以从以下的几点进行斟酌与考虑&#xff1a; &#xff08;1&#xff09;你最擅长的是哪个方面&#xff1f;&#xff08;2&#xff09;你的兴趣爱好是在哪个方面&am…

从0开始搭建完整UVM工程(可直接用于实际的工程中)、含源码(包括makefile文件)、可直接运行,及详细注释

一、说明 网上的实现uvm工程代码都是抄自张强所著的《UVM实战》,都是讲所有文件放到一个文件夹,且不涉及到实际工程中的uvm结构,以及多文件层级结构,让人理解起来较为困难,本文则将会从0开始教大家如何搭建一个具有实际工程效果的UVM框架: 其对应的书中的框架图如下所示:…

chatgpt赋能Python-pythoncontinue

简介 Python是一种高级编程语言&#xff0c;受到越来越多的人们的欢迎。其中&#xff0c;continue是Python语言中的一个很重要的关键字&#xff0c;它的出现可以很好地帮助程序员们实现自己的编程目标。在本文中&#xff0c;我们将介绍continue关键字&#xff0c;并解释它在Py…

Fourier分析入门——第5章——连续函数

目录 第 5 章 连续函数 5.1 引言 5.2 内积和正交性(Inner products and orthogonality) 5.3 对称性(Symmetry) 5.4 复数值函数 第 5 章 连续函数 5.1 引言 在前面的章节中&#xff0c;我们只考虑了在有限区间 L 上定义的离散函数的Fourier级数模型。此类函数在实验科学…

spring 源码

bean的创建 获取类class 推断构造方法 Autoware 创建一个普通对象 依赖注入 populateBean 把一些属性注入 初始化之前 PostConstruct 注解 初始注入 实际可以用构造方法啊 初始化 initializationBean 1.判断是否有aware接口 invokeAwareMethods 2.执行 applyBeanP…

enq: TM - contention等待事件引起的数据库卡顿分析

用户的数据库系统在2022年5月31日下午17:25至17:45出现严重的锁等待&#xff0c;导致对应的应用程序出现卡顿等情况&#xff0c;业务系统的正常使用受到影响&#xff0c;无法正常办理业务&#xff1b;在此情况下需要排查出锁问题的深层原因&#xff0c;从而从根本上解决问题。 …

【Python psycopg2】零基础也能轻松掌握的学习路线与参考资料

Python psycopg2是一个Python库&#xff0c;在Python中提供了一个连接PostgreSQL数据库的接口。它可以让Python应用程序和PostgreSQL数据库之间进行通信和数据传输。学习Python psycopg2的路线和教程可以在查阅资料和实践中快速入门。 一、学习前置知识 学习Python psycopg2需…

23 memset 的调试

前言 同样是一个 很常用的 glibc 库函数 不管是 用户业务代码 还是 很多类库的代码, 基本上都会用到 内存数据的设置 不过 我们这里是从 具体的实现 来看一下 它的实现 主要是使用 汇编 来进行实现的, 因此 理解需要一定的基础 测试用例 就是简单的使用了一下 memcpy,…

去面试测试开发工程师要做哪些准备?大厂真实面试题汇总

目录 1.黑盒测试和白盒测试的区别特点和方法。 2.单元测试、集成测试、系统测试、验收测试、回归测试 3.集成测试和系统测试的区别和应用场景 4.α测试、β测试&#xff0c;以及它们的区别 5.给你一个字符串&#xff0c;你怎么判断是不是ip地址&#xff1f;手写这段代码&…

大数据之RDD的算子分类

文章目录 前言一、RDD的算子分类二、Transformation转换算子三、Action动作算子总结 前言 #博学谷IT学习技术支持# 上一篇文章主要讲述了两种RDD的创建方式&#xff0c;本篇文章接着讲RDD的算子及其分类。 一、RDD的算子分类 RDD的算子主要有两种类型&#xff0c;一种是Tran…

docker面试题:docker容器虚拟化与传统虚拟机比较

容器就是将软件打包成标准化单元&#xff0c;以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立软件包 &#xff0c;包含软件运行所需的所有内容&#xff1a;代码、运行时环境、系统工具、系统库和设置。容器化软件在任何环境中都能够始终如一地运行。容器赋予了软件独…

什么是强化学习?强化学习有哪些框架、算法、应用?

什么是强化学习&#xff1f; 强化学习是人工智能领域中的一种学习方式&#xff0c;其核心思想是通过一系列的试错过程&#xff0c;让智能体逐步学习如何在一个复杂的环境中进行最优的决策。这种学习方式的特点在于&#xff0c;智能体需要通过与环境的交互来获取奖励信号&#…

JAVA常用API - 正则表达式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 一&#xff0c;正则表达式是什么&#xff1f; 二&#xff0c;正则表达式符号 三&#xff0c;常用正则表达式组合 四&#xff0c;正则表达…

利用MySQL的binlog恢复误删的数据库

1 查看当前数据库内容并备份数据库 查看数据库信息&#xff1a; 备份数据库&#xff1a; [rootlocalhost ~]# mysqldump -u root -p t > /mnt/t.sql Enter password: [rootlocalhost ~]# ll /mnt/t.sql -rw-r--r-- 1 root root 1771 Aug 25 11:56 /mnt/t.sql2 开启bin…

java-----web项目部署到新服务器以及服务器的部署

目录 一、服务器安装jdk1.8 二、安装mysql5.7 2.1下载mysql 2.2修改root账号密码 2.3设置远程登录 三、项目的部署 3.1导入数据库 3.2将项目打成jar包 3.3项目上传 服务器部署项目的方式&#xff0c;本次以打成jar包的形式讲解&#xff08;以springboot项目为例&#xf…

2023年贵工程团体程序设计赛--部分题解

作者&#xff1a;杨书瑶 单位&#xff1a;贵州工程应用技术学院 本次比赛由大学生程序设计协会(cpa)举办,共计17道题&#xff0c;295分。其中5分题三道&#xff0c;10分题三道&#xff0c;15分题两道&#xff0c;20分题三道&#xff0c;25分题两道&#xff0c;30分题两道…

chatgpt赋能Python-pythonbus

PythonBus: 为Python 开发者量身打造的社区 对于所有Python 开发者而言&#xff0c;PythonBus 是一个非常值得加入的社区平台。该平台汇聚了全球最顶尖的Python 开发者&#xff0c;同时也是一站式排除各种问题并交流经验的平台。在PythonBus&#xff0c;无论你是初学者还是专家…

【模电实验】基本放大电路的研究实验

实验四 基本放大电路的研究实验&#xff08;2小时&#xff09; —、实验目的 &#xff08;1&#xff09;充分认识分压式偏置放大电路的电压放大作用&#xff0c;了解其静态工作点的调节、测量&#xff0c;认识截止失真和饱和失真现象&#xff0c;了解消除截止失真和饱和失真…