python 正则模块(re)

2023-11-05

1.正则表达式常见的具体应用场景如下:

  1. 手机号校验;

  2. 邮箱校验;

  3. 身份证校验;

  4. 网页标签匹配;

  5. 车牌号校验;

  6. 中文校验;

2.re模块

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使 Python 语言拥有全部的正则表达式功能。 

1>元字符,量词,贪婪与非贪婪匹配,分组与或的使用

元字符:

字符 功能
. 匹配任意1个字符(除了\n)
[ ] 匹配[ ]中列举的字符
\d 匹配数字,即0-9
\D 匹配非数字,即不是数字
\s 匹配空白,即 空格
\S 匹配非空白
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符
#案例演示01:(.	匹配任意1个字符(除了\n))


# .	匹配任意1个字符(除了\n)
import re

ret = re.match("t.o", "t\no")
if ret:
    print(ret.group())
else:
    print("匹配失败")

# .	匹配任意1个字符(除了\n)
import re

ret = re.match("t.o", "two")
if ret:
    print(ret.group())
else:
    print("匹配失败")


#案例演示02:([ ]   匹配[ ]中列举的字符 ,只匹配任意一个字符)


# [ ]	匹配[ ]中列举的字符 ,只匹配任意一个字符
import re

ret = re.match("t[1wqs]o", "two")   # 将w换成9,查看匹配结果
if ret:
    print(ret.group())
else:
    print("匹配失败")


#案例演示03:(\d  匹配数字,即0-9)


# \d	匹配数字,即0-9
import re

ret = re.match("t\do", "t6o")   # 将6换成a,查看匹配结果
if ret:
    print(ret.group())
else:
    print("匹配失败")


#案例演示04:(\D  匹配非数字,即不是数字)


# \D	匹配非数字,即不是数字
import re

ret = re.match("t\Do", "two")   # 将w换成7,查看匹配结果
if ret:
    print(ret.group())
else:
    print("匹配失败")


#案例演示05:(\s  匹配空白,即 空格)


# \s	匹配空白,即 空格
import re

ret = re.match("t\so", "t o")   # 将空格换成z,查看匹配结果
if ret:
    print(ret.group())
else:
    print("匹配失败")


#案例演示06:(\S  匹配非空白)


# \S	匹配非空白
import re

ret = re.match("t\So", "two")  # 将w替换成空格,查看匹配结果
if ret:
    print(ret.group())
else:
    print("匹配失败")


#案例演示07:(\w  匹配单词字符,即a-z、A-Z、0-9、_)


# \w	匹配单词字符,即a-z、A-Z、0-9、_
import re

ret = re.match("t\wo", "t_o")   # 将_分别替换成a、A、z、Z,分别查看匹配结果
if ret:
    print(ret.group())
else:
    print("匹配失败")


#案例演示08:(\W  匹配非单词字符)


# \W	匹配非单词字符
import re

ret = re.match("t\Wo", "t%o")   # 将%分别替换成a、A、#、&,分别查看匹配结果
if ret:
    print(ret.group())
else:
    print("匹配失败")

量词:

字符 功能
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有1次
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m} 匹配前一个字符出现m次
{m,n} 匹配前一个字符出现从m到n次
案例演示01:(*   匹配前一个字符出现0次或者无限次,即可有可无)


# *	匹配前一个字符出现0次或者无限次,即可有可无
import re
ret = re.match("tw*o","twwo")   # 将ww分别替换成w、www、wwwwwwwww或者删除ww,分别查看匹配结果
if ret:
    print(ret.group())
else:
    print("匹配失败")


案例演示02:(+   匹配前一个字符出现1次或者无限次,即至少有1次)


# +	匹配前一个字符出现1次或者无限次,即至少有1次
import re
ret = re.match("tw+o","twwo")    # 将ww分别替换成w、www、wwwwwwwww或者删除ww,分别查看匹配结果,并比较与									*的区别
if ret:
    print(ret.group())
else:
    print("匹配失败")


案例演示03:(?   匹配前一个字符出现1次或者0次,即要么有1次,要么没有)


# ?	匹配前一个字符出现1次或者0次,即要么有1次,要么没有        
import re
ret = re.match("tw?o","to")
if ret:
    print(ret.group())
else:
    print("匹配失败")

贪婪与非贪婪匹配:(?非贪婪匹配 +* 贪婪匹配)

案例演示04:({m} 匹配前一个字符出现m次)


# {m}	匹配前一个字符出现m次
import re
ret = re.match("tw{2}o", "twwo")   # 将ww替换为www,查看匹配结果,比较区别
if ret:
    print(ret.group())
else:
    print("匹配失败")


案例演示05:({m,n}   匹配前一个字符出现从m到n次)


# {m,n} 匹配前一个字符出现从m到n次
import re
ret = re.match("tw{3,5}o","twwwwwo")  # 将wwwww替换为ww,查看匹配结果
if ret:
    print(ret.group())
else:
    print("匹配失败")
    
# 特殊情况说明{3,},对应含义为:匹配前一字符至少出现三次的情况;
import re
ret = re.match("tw{3,}o","twwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwo")
if ret:
    print(ret.group())
else:
    print("匹配失败")
    
# 特殊情况说明{,5},对应含义为:匹配前一字符最多出现5次的情况;
import re
ret = re.match("tw{,5}o","twwwo")
if ret:
    print(ret.group())
else:
    print("匹配失败")

分组与或的使用:

匹配分组

字符 功能
| 匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串
案例演示01:((ab)    将括号中字符作为一个分组)

# (ab)	将括号中字符作为一个分组    www.baidu.com
import re
ret = re.match("^(https://www)\.[a-z]+(\.com)$", "https://www.baidu.com")
if ret:
    print(ret.group())
else:
    print("匹配失败")


案例演示02:(|   匹配左右任意一个表达式)


# 定义邮箱列表
email_list = ["xiaoWang@163.com", "xiaoWang@163.comheihei", "12345678@qq.com"]
# 导包
import re
# 遍历列表,获取列表中的邮箱字符串
for email in email_list:
    # 匹配每一个邮箱字符串,判断是否符合邮箱格式要求
    ret = re.match("\w{4,20}@(163|qq|sina|139)(.com)$", email)
    if ret:
        print("正确邮箱:", ret.group())
    else:
        print("%s匹配失败" % email)


案例演示03:(\num    引用分组num匹配到的字符串)


# 匹配标签:<html>hh</html>
# \num	引用分组num匹配到的字符串     r  声明原生字符,特别针对\等
import re
ret = re.match(r"<([a-z]+)>[a-z]{2}</\1>","<html>hh</html>")
if ret:
    print(ret.group())
else:
    print("匹配失败")


案例演示04:((?P<name>)  分组起别名, (?P=name)  引用别名为name分组匹配到的字符串 )


# 匹配标签:<html><h1>hh</h1></html>
# (?P<name>)	分组起别名
# (?P=name)	引用别名为name分组匹配到的字符串
import re
ret = re.match(r"<(?P<xiaohei>[a-z]{4})><(?P<xiaobai>\w{2})>[a-z]{2}</(?P=xiaobai)></(?P=xiaohei)>","<html><h1>hh</h1></html>")
if ret:
    print(ret.group())
else:
    print("匹配失败")

匹配开头

字符 功能
^ 匹配字符串开头

现有王老师手机号:13051115888,要求使用正则表达式,判断该手机号是否合规?

思路分析:

  1. 手机号长度11位数字;

  2. 手机号以1开头;

  3. 手机号号段(3-8),例如:130、152、186,其中第二位为号段;

import re
ret = re.match("^1[3-8]\d{9}","13051115888")
if ret:
    print(ret.group())
else:
    print("匹配失败")

匹配结尾

字符 功能
$ 匹配字符串以xxx结尾

现有赵老师邮箱号:zhaolaoshi123456@sina.com,要求使用正则表达式,判断该邮箱账号是否合规?

思路分析:

  1. 邮箱账号4-20位字符;

  2. 邮箱账号一般以.com结尾;

import re
ret = re.match("\w{4,20}@sina(.com)$","zhaolaoshi123456@sina.com")  # 正则表达式中的(),代表分组匹配
if ret:
    print(ret.group())
else:
    print("匹配失败")

2>re.match函数(re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。 )

用法:re.match(pattern, string, flags=0)

函数参数说明:

参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

匹配成功re.match方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

匹配对象方法 描述
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

案例

# 导包
import re
# 使用re模块中的match(正则表达式,要匹配的字符串对象)方法进行匹配
ret = re.match("abc","abcdef")
if ret:  # 判断匹配结果是否存在
    print(ret.group())
else:
    print("匹配失败")

3>re.search函数(re.search 扫描整个字符串并返回第一个成功的匹配。 )

用法:re.search(pattern, string, flags=0)

函数参数说明:

参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

匹配成功re.search方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

匹配对象方法 描述
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号

 案例1

import re

ret_01 = re.search('www', 'www.runoob.com')  # 在起始位置匹配
if ret_01:
    print(ret_01.group())   # 查看匹配到的对象
    print(ret_01.span())    # 查看匹配到的对象的位置区间(下标索引)
else:
    print("ret_01 匹配失败")

 案例2

import re

ret_02 = re.search('com', 'www.runoob.com')  # 不在起始位置匹配
if ret_02:
    print(ret_02.group())  # 查看匹配到的对象
    print(ret_02.span())  # 查看匹配到的对象的位置区间(下标索引)
else:
    print("ret_02 匹配失败")

 案例3

import re
# 字符串
line = "Cats are smarter than dogs";
# search匹配(分组)
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)
# 如果匹配结果存在,则分组查看匹配数据
if searchObj:
   print "searchObj.group() : ", searchObj.group()
   print "searchObj.group(1) : ", searchObj.group(1)
   print "searchObj.group(2) : ", searchObj.group(2)
else:
   print "Nothing found!!"

4>re.findall函数(在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。 )

注意: match 和 search 是匹配一次 findall 匹配所有。

用法:findall(string[, pos[, endpos]])

参数:

  • string : 待匹配的字符串。

  • pos : 可选参数,指定字符串的起始位置,默认为 0。

  • endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。

查找字符串中的所有数字,返回包含所有匹配结果的列表:

案例

import re

pattern = re.compile(r'\d+')  # 查找数字
result1 = pattern.findall('runoob 123 google 456')
result2 = pattern.findall('run88oob123google456', 0, 10)

print(result1)
print(result2)

结果:
['123', '456']
['88', '12']

5>re.split函数(根据匹配进⾏切割字符串,并返回⼀个列表。)

用法:re.split(pattern, string, maxsplit=0, flags=0)

参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串
maxsplit 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数

案例:

import re
ret = re.split(r":| ","dasdsa:asdadas:dasdadada")
print(ret)

6>re.sub函数(sub是substitute的所写,表示替换,将匹配到的数据进⾏替换。)

用法:re.sub(pattern, repl, string, count=0, flags=0)

#参数	描述
#pattern	必选,表示正则中的模式字符串
#repl	必选,就是replacement,要替换的字符串,也可为一个函数
#string	必选,被替换的那个string字符串
#count	可选参数,count 是要替换的最大次数,必须是非负整数。如果省略这个参数或设为 0,所有的匹配都会被替换
#flag	可选参数,标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等


import re
ret = re.sub(r"\d+", '998', "python = 997")
print(ret)

结果:
python=998

7>re.subn函数(行为与sub()相同,但是返回一个元组 (字符串, 替换次数)

用法:re.subn(pattern, repl, string[, count])返回:(sub(repl, string[, count]), 替换次数)


import re
pattern = re.compile(r'(\w+) (\w+)')
s = 'i say, hello world!'
print(re.subn(pattern, r'\2 \1', s))
def func(m):
    return m.group(1).title() + ' ' + m.group(2).title()
print(re.subn(pattern, func, s))

8>re.compile函数(compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。)

prog = re.compile(pattern)
result = prog.match(string)

等价于

result = re.match(pattern, string)

案例

>>>import re
>>> pattern = re.compile(r'\d+')   
m = pattern.match('one12twothree34four', 3, 10) # 从'1'的位置开始匹配,正好匹配
>>> print m                                         # 返回一个 Match 对象
<_sre.SRE_Match object at 0x10a42aac0>
>>> m.group(0)   # 可省略 0
'12'
>>> m.start(0)   # 可省略 0
3
>>> m.end(0)     # 可省略 0
5
>>> m.span(0)    # 可省略 0
(3, 5)

在上面,当匹配成功时返回一个 Match 对象,其中:

group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0);
start([group]) 方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0;
end([group]) 方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0;
span([group]) 方法返回 (start(group), end(group))


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 正则模块(re) 的相关文章

  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • C语言学习路线图 #CSDN博文精选# #IT技术# #C语言# #学习路线# #系统化学习#

    大家好 我是小C 又见面啦 文章过滤器 精选大咖干货 助力学习之路 5天20篇CSDN精选博文带你掌握系统化学习方法 专栏将挑选有关 系统化学习方法 的20篇优质文章 帮助大家掌握更加科学的学习方法 在这里 你将收获 快速掌握系统化学习的理
  • Docker-compose安装

    docker compose docker compose是用于定义和运行多容器docker应用程序的工具 compose 通过一个配置文件来管理多个docker容器 可以使用docker compose yml脚本来启动 停止 重启应用
  • 如何编写测试用例

    用例的五个构成元素 下面从这五个元素的角度 去剖析如何编写测试用例 用例标题 用例标题就是测试点名称 用例标题是用来说明这个用例的测试目的的 好的用例标题是别人看完你这个用例标题后就知道你这个用例是测什么的 但并不是标题越详细越好 既然是标
  • Cdiak

    include
  • 多模态超省钱!JinaChat 面向开发者的大模型服务

    2023年6月25日 Jina AI 发布了 JinaChat 一个面向开发者和终端用户的多模态大模型API 传统大型语言模型往往将竞争力建立在 参数多 和 刷分强 的基础上 然而对于应用开发者来说 传统模型商的 API 并不能很好地让开发
  • STM32F4驱动42步进电机(采用驱动器)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 器件 实物 接线 TB6600拨码卡关 代码说明 main c 代码如下 示例 main c 代码 极简版 step motor c 代码如下 示例 step mo
  • 机票票面各项内容详解

    ALLOW 或 BAG 说明免费托运行李的限制 记重或记件 例如印 20K 就表示限带 20公斤 超重部分运费还要另计 一般经济舱每人限重为 20 公斤 相关内容见 行李规定 BOOKING REF 订票代号 CARRIER 表示 航空公司
  • Nginx启动,重启以及基本命令

    1 启动nginx 进入nginx安装目录执行 sbin nginx c conf nginx conf 2 验证nginx配置文件是否正确 方法1 进入nginx安装目录sbin下 输入命令 nginx t 回显test is succe
  • ubuntu工具列表

    微信 GitHub zq1997 deepin wine deepin源移植 Debian Ubuntu上最快的QQ 微信安装方式 FileZilla ftp sftp连接服务器 Ubuntu18 04安装FileZilla ubuntu安
  • 程序设计之归并排序

    6 86 归并排序 10 分 本题要求实现二路归并排序中的归并操作 待排序列的长度1 lt n lt 1000 函数接口定义 void Merge SqList L int low int m int high 其中L是待排序表 使排序后的
  • 阿里前端开发工具Weex安装学习

    支持原创 更多内容欢迎关注作者博客 http www china10s com blog p 314 移动互联网的开发方式 最开始的手机厂商定制版的封闭系统开发 到后来智能机出现之后 Android和iOS异军突起 形成了两大独立的阵营 这
  • Table is marked as crashed and should be repaired 解决办法

    遇到这个问题几个敲命令轻松搞定 1 首先进入mysql命令台 mysql u root p 回车 输入密码 2 查询所有的库 mysql gt show databases 3 进入数据库 eduyun 2015 sp1 是库名 mysql
  • JAVA设计模式(15)-解释器模式

    定义 给定一种语言 定义他的文法的一种表示 并定义一个解释器 该解释器使用该表示来解释语言中句子 类型 行为类模式 类图 解释器模式是一个比较少用的模式 本人之前也没有用过这个模式 下面我们就来一起看一下解释器模式 解释器模式的结构 抽象解
  • mac 如何安装hp laserjet m1136驱动

    直接在苹果的官网下载驱动就可以了 要下V5 1的那个版本https support apple com kb DL1888 viewlocale zh CN locale zh CN 选择系统偏好设置中的打印机 然后选择相对应的版本就可以了
  • C++语言基础

    1 1 1 简述下C 语言的特点 参考回答 C 在C语言基础上引入了面对对象的机制 同时也兼容C语言 C 有三大特性 1 封装 2 继承 3 多态 C 语言编写出的程序结构清晰 易于扩充 程序可读性好 C 生成的代码质量高 运行效率高 仅比
  • win10连接文件服务器记住密码如何删除,win10系统删除已记住的访问共享的账户与密码的操作方法...

    win10系统删除已记住的访问共享的账户与密码的操作方法 很多win10用户在使用电脑的时候 会发现win10系统删除已记住的访问共享的账户与密码的的现象 根据小编的调查并不是所有的朋友都知道win10系统删除已记住的访问共享的账户与密码的
  • Inno Setup 系列之先卸载之后再安装

    Inno Setup 系列之先卸载之后再安装 需求使用Inno Setup打包程序之后 很多时候我们需要在安装文件之前卸载原有的程序而不是覆盖安装 本文的Code就是实现了这样的功能 如果想要在安装前先卸载 那么需要加下面代码 需要注意的是
  • 案例分析2

    文章目录 16 质量属性 数据库 嵌入式 web 软件设计 15 质量属性 飞机起飞 嵌入式 数据库 数据持久层 14 mvc 数据流图 构件 质量属性 web 13 ESB mvc 安全 12 架构风格 ODP 嵌入式 设计模式 关系型数
  • QT-智能指针

    lt 智能指针与普通指针 最明显区别普通指针 要手动去释放 智能指针出了作用域自动释放 完全不用担心有内存忘记释放的操作 gt 智能指针 1 QScopedPointer 区域指针 2 QSharedPointer 智能指针 强引用计数指针
  • python 正则模块(re)

    1 正则表达式常见的具体应用场景如下 手机号校验 邮箱校验 身份证校验 网页标签匹配 车牌号校验 中文校验 2 re模块 正则表达式是一个特殊的字符序列 它能帮助你方便的检查一个字符串是否与某种模式匹配 Python 自1 5版本起增加了r