python之正则表达式总结

正则表达式
对于正则表达式的学习,我整理了网上的一些资料,希望可以帮助到各位!!!

我们可以使用正则表达式来定义字符串的匹配模式,即如何检查一个字符串是否有跟某种模式匹配的部分或者从一个字符串中将与模式匹配的部分提取出来或者替换掉。

概述

正则表达式[Regular Expression],简写为regex,RE,使用单个字符串来描述一系列具有特殊
格式的字符串。
功能:
        a.搜索
        b.替换
        c.匹配
使用情景:
        爬虫        验证手机号,验证邮箱,密码【用户名】
import re# re.match()
# 匹配字符串是否以指定的正则内容开头,匹配成功返回对象,匹配失败返回None
# 第一个参数:正则表达式
# 第二个参数:要验证的字符串
# 第三个参数:可选参数,正则表达式修饰符# \d:0 - 9
# +:表示出现1次或者多次
print(re.match(r"\d+", "12345esd"))
# <re.Match object; span=(0, 5), match='12345'>
print(re.match(r"\d+", "as12345esd"))
# None# re.search()
# 匹配字符串中是否包含指定的正则内容,匹配成功返回对象,匹配失败返回 None
# 第一个参数:正则表达式
# 第二个参数:要验证的字符串
# 第三个参数:可选参数,正则表达式修饰符search_result_1 = re.search(r"\d+", "12345esd")
if search_result_1:print("re.search() - 匹配成功:", search_result_1.group())
else:print("re.search() - 匹配失败")search_result_2 = re.search(r"\d+", "as12345esd")
if search_result_2:print("re.search() - 匹配成功:", search_result_2.group())
else:print("re.search() - 匹配失败")# 3. re.findall()
# 获取所有匹配的内容,会得到一个列表
# 第一个参数:正则表达式
# 第二个参数:要验证的字符串
findall_result = re.findall(r"\d+", "12abc34def56")
print("re.findall()结果:", findall_result)

表达式含义示例说明
.匹配除换行符以外的任意字符-
[0123456789]是字符集合,表示匹配方括号中所包含的任意一个字符匹配“123abc”中的1、2、3
[good]匹配good中任意一个字符匹配“good”中的g、o、o、d其中一个
[a-z]匹配任意小写字母匹配“abc”中的a、b、c
[A-Z]匹配任意大写字母匹配“ABC”中的A、B、C
[0-9]匹配任意数字,类似[0123456789]匹配“123abc”中的1、2、3
[0-9a-zA-Z]匹配任意的数字和字母匹配“123abcABC”中的任何字符
[0-9a-zA-Z_]匹配任意的数字、字母和下划线匹配“123abc_ABC”中的任何字符
[^good]匹配除了g、o、o、d这几个字符以外的所有字符,中括号里的^称为脱字符,表示不匹配集合中的字符匹配“hello”中的h、e、l、l
[^0-9]匹配所有的非数字字符匹配“abc”中的a、b、c
\d匹配数字,效果同[0-9]匹配“123abc”中的1、2、3
\D匹配非数字字符,效果同[^\d]匹配“abc”中的a、b、c
\w匹配数字、字母和下划线,效果同[0-9a-zA-Z_]匹配“123abc_ABC”中的任何字符
\W匹配非数字、字母和下划线,效果同[^\w]匹配“!@#”中的!、@、#
\s匹配任意的空白符(空格,回车,换行,制表,换页),效果同[ \n\t\f\r]匹配文本中的空格、回车等空白部分
import re# [ ]:只匹配其中的一位
# - :表示一个区间
print(re.search("he[0-9]11o", "he911o"))
# <re.Match object; span=(0, 6), match='he911o'>1print(re.search(r"go[zxc]od", "goxod"))
# <re.Match object; span=(0, 5), match='goxod'>print(re.search("he[a-z]llo", "hepllo"))
# <re.Match object; span=(0, 6), match='hepllo'>print(re.search("hello[0-9a-zA-Z_]", "hello9"))
# <re.Match object; span=(0, 6), match='hell09'>print(re.search(r"hello\d", "hello2"))
# <re.Match object; span=(0, 6), match='hello2'>print(re.search(r"hello\D", "hellowklo_"))
# <re.Match object; span=(0, 6), match='hellow'>print(re.search(r"hello\w", "hello1"))
# <re.Match object; span=(0, 6), match='hello1'>print(re.search(r"hello\W", "hello!"))
# <re.Match object; span=(0, 6), match='hello!'print(re.search(r"mone\sy", "mone\ny"))
# <re.Match object; span=(0, 6), match='mone\ny'>print(re.search(r"money[^0-9]", "money!"))
# <re.Match object; span=(0, 6), match='money!'

模式修饰符

模式修饰符:修饰我们写的正则表达式
  • .:表示匹配除了换行以外的任意单个字符        \n表示换行
  • re.S:可以通过,匹配到n(换行)
  • re.I:忽略字母大小写
import re# 匹配 shenzhen 加一个除换行外的任意字符,这里能匹配 shenzhen9
result1 = re.search("shenzhen.", "shenzhen9")
print(result1)  # <re.Match object; span=(0, 9), match='shenzhen9'># 匹配 shenzhen 加一个除换行外的任意字符,这里不能匹配 shenzhen\n
result2 = re.search("shenzhen.", "shenzhen\n")
print(result2)  # None# 匹配 shenzhen 加一个任意字符(因为使用了re.S,可匹配换行),这里能匹配 shenzhen\n
result3 = re.search("shenzhen.", "shenzhen\n", re.S)
print(result3)  # <re.Match object; span=(0, 9), match='shenzhen\n'># 匹配 shenzhen 加一个小写字母,这里不能匹配 shenzhenS 中的大写 S
result4 = re.search("shenzhen[a-z]", "shenzhenS")
print(result4)  # None# 匹配 shenzhen 加一个字母(不区分大小写),这里能匹配 shenzhenS
result5 = re.search("shenzhen[a-z]", "shenzhenS", re.I)
print(result5)  # <re.Match object; span=(0, 9), match='shenzhenS'>

匹配多个字符

- - - - - - - - - - - - - - - - - - - - - - - - - - - - 匹配多个字符 - - - - - - - - - - - - - - - - - - - - - - - - - -

说明:下方的 x、y、z 均为假设的普通字符,n、m(非负整数),不是正则表达式的元字符。

  • (xyz):匹配小括号内的 xyz(作为一个整体去匹配)。
  • x?:匹配 0 个或者 1 个 x。
  • x*:匹配 0 个或者任意多个 x(.* 表示匹配 0 个或者任意多个字符(换行符除外))。
  • x+:匹配至少一个 x。
  • x{n}:匹配确定的 n 个 x(n 是一个非负整数)。
  • x{n,}:匹配至少 n 个 x。
  • x{,n}:匹配最多 n 个 x。
  • x{n,m}:匹配至少 n 个最多 m 个 x。注意:n ≤ m。
import re# 匹配多个字符
#?:表示前面的字符可以出现 0 次或者 1 次(非贪婪模式)
#+:表示前面的字符可以出现 1 次或者多次(贪婪模式)
#*:表示前面的字符可以出现 0 次或者多次(贪婪模式)
#{}:表示前面的字符可以出现指定的次数或者次数的范围(贪婪模式)
# {3}:表示前面的字符只能出现 3 次
# {3,6}:表示前面的字符可以出现 3 - 6 次
# {3,}:表示前面的字符至少出现 3 次
# {,3}:表示前面的字符最多出现 3 次
import re# ? 表示前面的字符出现0次或1次
# 0次的情况
result1 = re.search("goog?le", "goole")
print(result1)  # <re.Match object; span=(0, 5), match='goole'>
# 1次的情况
result2 = re.search("goog?le", "google")
print(result2)  # <re.Match object; span=(0, 6), match='google'>
# g出现多次的情况(不符合?的规则)
result3 = re.search("goog?le", "googggggle")
print(result3)  # None# + 表示前面的字符出现1次或多次
# 0次不符合+规则
result4 = re.search("goog+le", "goole")
print(result4)  # None
# 1次的情况
result5 = re.search("goog+le", "google")
print(result5)  # <re.Match object; span=(0, 6), match='google'>
# 多次的情况
result6 = re.search("goog+le", "googgggggggggggle")
print(result6)  # <re.Match object; span=(0, 17), match='googgggggggggggle'># *表示前面的字符出现0次或多次
# 0次的情况
result7 = re.search("goog*le", "goole")
print(result7)  # <re.Match object; span=(0, 5), match='goole'>
# 多次的情况
result8 = re.search("goog*le", "googgggggggggggle")
print(result8)  # <re.Match object; span=(0, 17), match='googgggggggggggle'># {3}表示前面的字符恰好出现3次
# 不足3次
result9 = re.search("goog{3}le", "goole")
print(result9)  # None
# 不足3次
result10 = re.search("goog{3}le", "google")
print(result10)  # None
# 超过3次
result11 = re.search("goog{3}le", "googgggggggggle")
print(result11)  # None
# 恰好3次
result12 = re.search("goog{3}le", "googggle")
print(result12)  # <re.Match object; span=(0, 8), match='googggle'># {3,6}表示前面的字符出现3到6次
# 不足3次
result13 = re.search("goog{3,6}le", "goole")
print(result13)  # None
# 不足3次
result14 = re.search("goog{3,6}le", "googgle")
print(result14)  # None
# 在范围内
result15 = re.search("goog{3,6}le", "googgggle")
print(result15)  # <re.Match object; span=(0, 9), match='googgggle'># {3,}表示前面的字符至少出现3次
# 不足3次
result16 = re.search("goog{3,}le", "goole")
print(result16)  # None
# 不足3次
result17 = re.search("goog{3,}le", "google")
print(result17)  # None
# 至少3次
result18 = re.search("goog{3,}le", "googggle")
print(result18)  # <re.Match object; span=(0, 8), match='googggle'>
# 至少3次
result19 = re.search("goog{3,}le", "googgggggggggggggggle")
print(result19)  # <re.Match object; span=(0, 21), match='googgggggggggggggggle'># {,3}表示前面的字符最多出现3次
# 超过3次
result20 = re.search("goog{,3}le", "googgggle")
print(result20)  # None
# 在范围内
result21 = re.search("goog{,3}le", "googgle")
print(result21)  # <re.Match object; span=(0, 7), match='googgle'>
# 在范围内
result22 = re.search("goog{,3}le", "goole")
print(result22)  # <re.Match object; span=(0, 5), match='goole'>

匹配边界字符

import re# ===== 边界字符 =====
# ^行首匹配(以指定字符开头),和在[]里的不是一个意思
# $行尾匹配
# ^文本$: 完全匹配
print(re.search("^world", "world"))  # <re.Match object; span=(0, 5), match='world'>
print(re.search("^world", "hworld"))  # Noneprint(re.search("world$", "12world"))  # <re.Match object; span=(2, 7), match='world'>
print(re.search("world$", "worlds"))  # Noneprint(re.search("^world$", "Iworlds"))  # None
print(re.search("^world$", "world"))  # <re.Match object; span=(0, 5), match='world'>
print(re.search("^world$", "worldworld"))  # Noneprint(re.search("^worl+ds$", "wor11111111d"))  # None# 词边界
# \b匹配一个单词的边界,也就是单词和空格间的位置
# \B匹配非单词边界(了解)
print(re.search(r"google\b", "abc google 123google xcvgoogle456"))  # <re.Match object; span=(4, 10), match='google'>
print(re.search(r"google\B", "abcgoogle 123google xcvgoogle456"))  # <re.Match object; span=(0, 7), match='goog.le'># 转义、让正则表达式中的一些字符失去原有的意义
# \.表示一个单纯的.不是正则中的除了换行以外任意一个字符
print(re.search("goog\\.le", "goog.le"))  # <re.Match object; span=(0, 7), match='goog.le'># |表示或者(正则表达式1|正则表达式2只要满足其中一个正则表达式就能被匹配成功)
print(re.search("ef|cd", "123ef567"))  # <re.Match object; span=(3, 5), match='ef'>
匹配分组
() : 表示一个整体 , 表示分组 , 然后捕获
import retel = "0755-88988888"
pattern = r'(\d{4})-(\d{8})'  # 在字符串前面加上 r 表示原始字符串
result = re.search(pattern, tel)
if result:print(result)  # <re.Match object; span=(0, 13), match='0755-88988888'>print(result.group(0))  # 0755-88988888print(result.group(1))  # 0755print(result.group(2))  # 88988888print(result.groups())  # ('0755', '88988888')
else:print("未找到匹配的电话号码格式")

贪婪和非贪婪

贪婪匹配与非贪婪匹配概念

在正则表达式中,贪婪匹配和非贪婪匹配主要决定了匹配的字符数量。

  • 贪婪匹配:在满足匹配条件的情况下,尽可能多地匹配字符。例如,+ 是贪婪匹配的量词,当使用 d+ 时,它会尝试匹配尽可能多的数字。
  • 非贪婪匹配:在满足匹配条件的情况下,尽可能少地匹配字符。通过在贪婪量词(如 +*)后面添加 ? 来实现非贪婪匹配。例如,d+? 会尽可能少地匹配数字。
import re# 正则表达式中的贪婪和非贪婪
# 贪婪匹配示例
result1 = re.findall(r"abc(\d+)", "abc2345678vf")
print("贪婪匹配结果:", result1)  # 贪婪匹配结果: ['2345678']# 非贪婪匹配示例
result2 = re.findall(r"abc(\d+?)", "abc2345678vf")
print("非贪婪匹配结果:", result2)  # 非贪婪匹配结果: ['2']

re模块中常用功能函数

函数

说明

compile(pattern, flags=0)

编译正则表达式pattern,并返回一个正则表达式对象。flags用于指定正则表达式的匹配模式,如忽略大小写等。

match(pattern, string, flags=0)

从字符串string的起始位置匹配正则表达式pattern。如果匹配成功,返回一个匹配对象;否则返回None

search(pattern, string, flags=0)

搜索字符串string中第一次出现正则表达式pattern的模式。如果找到匹配项,返回一个匹配对象;否则返回None

split(pattern, string, maxsplit=0, flags=0)

使用正则表达式pattern作为分隔符拆分字符串stringmaxsplit指定最大分割次数,返回分割后的列表。

sub(pattern, repl, string, count=0, flags=0)

使用字符串repl替换字符串string中与正则表达式pattern匹配的所有模式。count指定替换次数,返回替换后的字符串。

fullmatch(pattern, string, flags=0)

如果字符串string与正则表达式pattern完全匹配(从开头到结尾),则返回匹配对象;否则返回None

findall(pattern, string, flags=0)

查找字符串string中所有与正则表达式pattern匹配的模式,并返回一个包含所有匹配项的列表。

finditer(pattern, string, flags=0)

查找字符串string中所有与正则表达式pattern匹配的模式,并返回一个迭代器,每个元素都是一个匹配对象。

purge()

清除隐式编译的正则表达式的缓存。

标志

说明

re.I 或 re.IGNORECASE

忽略大小写匹配。

re.M 或 re.MULTILINE

多行匹配,改变^$的行为,使它们分别匹配每一行的开始和结束,而不是整个字符串的开始和结束。

import re
# 1. re.match()
# 匹配字符串是否以指定的正则内容开头,匹配成功返回对象,匹配失败返回None
# 第一个参数:正则表达式
# 第二个参数:要验证的字符串
# 第三个参数:可选参数,正则表达式修饰符
text1 = "abc123"
match_result1 = re.match(r"abc", text1)
if match_result1:print("re.match()匹配成功:", match_result1.group())
else:print("re.match()匹配失败")# 2. re.search()
# 匹配字符串中是否包含指定的正则内容,匹配成功返回对象,匹配失败返回None
# 第一个参数:正则表达式
# 第二个参数:要验证的字符串
# 第三个参数:可选参数,正则表达式修饰符
text2 = "hello abc world"
search_result = re.search(r"abc", text2)
if search_result:print("re.search()匹配成功:", search_result.group())
else:print("re.search()匹配失败")# 3. re.findall()
# 获取所有匹配的内容,会得到一个列表
# 第一个参数:正则表达式
# 第二个参数:要验证的字符串
text3 = "a1b2c3a4b5"
findall_result = re.findall(r"\d", text3)
print("re.findall()结果:", findall_result)# 4. re.compile()编译正则表达式,提高正则匹配的效率
string = "0755-89787654"
com = re.compile(r'(\d{4})-(\d{8})')
print(com.findall(string))# 5. 拆分
# re.split()
print(re.split(r"\d", "sdf1234mkj5431km"))# 6. 替换
# re.sub()或者re.subn()
str1 = "难以掩盖内心的心情"
print(re.sub(r"\s+", "..", str1))
print(re.subn(r"\s+", "..", str1))# 7. 匹配中文
chinese = "[\u4e00-\u9fa5]+"
print(re.search(chinese, "hello!世界 345"))

综合案例

案例1:

"""
要求:用户名必须由字母、数字或下划线构成且长度在6~20个字符之间,QQ号是5~12的数字且首位不能为0
"""
import reusername = input('请输入用户名: ')
qq = input('请输入QQ号: ')
# match函数的第一个参数是正则表达式字符串或正则表达式对象
# match函数的第二个参数是要跟正则表达式做匹配的字符串对象
m1 = re.match(r'^[0-9a-zA-Z_]{6,20}$', username)
if not m1:print('请输入有效的用户名.')
# fullmatch函数要求字符串和正则表达式完全匹配
# 所以正则表达式没有写起始符和结束符
m2 = re.fullmatch(r'[1-9]\d{4,11}', qq)
if not m2:print('请输入有效的QQ号.')
if m1 and m2:print('你输入的信息是有效的!')

案例2:

import repoem = '窗前明月光,疑是地上霜。举头望明月,低头思故乡。'
sentences_list = re.findall(r'([^,。]+[,。]?)', poem)
for sentence in sentences_list:print(sentence)print()poem = '窗前明月光,疑是地上霜。举头望明月,低头思故乡。'
sentences_list = re.split(r'[,。]', poem)
sentences_list = [sentence for sentence in sentences_list if sentence]
for sentence in sentences_list:print(sentence)

总结

“很多事情都是熟能生巧,请大胆的去尝试吧!”

 

  恭喜你学会了正则表达式,快去试试吧!!! 

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

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

相关文章

Jmeter的安装,设置中文,解决乱码问题

1.Jmeter安装 1-Jmeter如何下载 1---我这里提供一个下载快的方式 https://www.123684.com/s/lWZKVv-4jiav?提取码:4x4y 2---Jmeter官网下载地址 Apache JMeter - Download Apache JMeter 2-配置java环境 1---下载javaJDK 官方下载地址 https://www.oracle.com/java/techno…

机器学习(七)——集成学习(个体与集成、Boosting、Bagging、随机森林RF、结合策略、多样性增强、多样性度量、Python源码)

目录 关于1 个体与集成2 Boosting3 Bagging与随机森林4 结合策略5 多样性X 案例代码X.1 分类任务-Adaboost-SVMX.1.1 源码X.1.2 数据集&#xff08;鸢尾花数据集&#xff09;X.1.3 模型效果 X.2 分类任务-随机森林RFX.2.1 源码X.2.2 数据集&#xff08;鸢尾花数据集&#xff09…

融合虚拟与现实,AR Engine为用户提供沉浸式交互体验

当今的应用市场中&#xff0c;传统的应用产品已经难以完全满足消费者的多样化需求。为了在竞争激烈的市场中脱颖而出&#xff0c;企业需要深入洞察用户需求&#xff0c;提供个性化的服务体验和差异化的产品创新&#xff0c;以吸引并留住消费者。 比如&#xff0c;购物类App通过…

「QT」几何数据类 之 QPolygon 多边形类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

.NET 一款替代cmd.exe的交互式命令渗透工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

跨境访问难题?SD-WAN跨境加速专线加速电商社交媒体推广

在全球化日益加深的今天&#xff0c;跨境电商已成为企业拓展国际市场的重要途径。然而&#xff0c;跨境电商在社交媒体平台进行推广时&#xff0c;常常面临一系列网络访问难题&#xff0c;如公网速度慢、员工办事效率低下、IP被封禁以及公司运维对网络维护的繁琐等。这些问题不…

让redis一直开启服务/自动启动

文章目录 你的redis是怎么打开的黑窗不能关?必须要自动启动吗?再说说mysql 本文的所有指令都建议在管理员权限下打开cmd控制台 推荐的以管理员身份打开控制台的方式 Win R 打开运行 输入cmdShift Ctrl Enter 你的redis是怎么打开的 安装过redis的朋友都知道, redis的安…

Python 分子图分类,GNN Model for HIV Molecules Classification,HIV 分子图分类模型;整图分类问题,代码实战

一、分子图 分子图&#xff08;molecular graph&#xff09;是一种用来表示分子结构的图形方式&#xff0c;其中原子被表示为节点&#xff08;vertices&#xff09;&#xff0c;化学键被表示为边&#xff08;edges&#xff09;。对于HIV&#xff08;人类免疫缺陷病毒&#xff…

vue项目实战

1.项目文件夹添加&#xff08;结构如下&#xff09; 2.页面构建 安装路由 npm install react-router-dom 3.页面基本模板 router文件夹下index.js的模板 // 引入组件 import Login from "../views/login"; // 注册路由数组 const routes [{// 首页默认是/path: …

势不可挡 创新引领 | 生信科技SOLIDWORKS 2025新品发布会·苏州站精彩回顾

2024年11月01日&#xff0c;由生信科技举办的SOLIDWORKS 2025新产品发布会在江苏苏州圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能&#xff0c;探索制造业数字化转型之路。 在苏州站活动开场&#xff0c;达索系统专业客户事业部华东区渠道经理马腾飞…

论文阅读《Structure-from-Motion Revisited》

摘要 增量式地运动结构恢复是从无序图像集合中进行三维重建的一个普遍策略。虽然增量式地重建系统在各个方面上都取得了巨大的进步&#xff0c;但鲁棒性、准确性、完整度和尺度仍然是构建真正通用管道的关键问题。我们提出了一种新的运动结构恢复技术&#xff0c;它改进了目前…

【人工智能】10分钟解读-深入浅出大语言模型(LLM)——从ChatGPT到未来AI的演进

文章目录 一、前言二、GPT模型的发展历程2.1 自然语言处理的局限2.2 机器学习的崛起2.3 深度学习的兴起2.3.1 神经网络的训练2.3.2 神经网络面临的挑战 2.4 Transformer的革命性突破2.4.1 Transformer的核心组成2.4.2 Transformer的优势 2.5 GPT模型的诞生与发展2.5.1 GPT的核心…

Vue 组件传递数据-Props(六)

一、Props传递静态数据 defineProps() 和 defineEmits() 为了在声明 props 和 emits 选项时获得完整的类型推导支持&#xff0c;我们可以使用 defineProps 和 defineEmits API&#xff0c;它们将自动地在 <script setup> 中可用&#xff1a; defineProps 和 defineEmits …

移动开发(七):.NET MAUI使用RESTAPI实现查询天气笔记

目录 一、接口准备 二、实体部分 三、页面部分 四、后台代码逻辑 五、总结 在移动开发过程中,第三方对接是非常常见的。今天给大家分享.NET MAUI如何使用REST API实现输入城市名称查询天气的示例,希望对大家学习.NET MAUI可以提供一些帮助! 一、接口准备 首先我们需要…

【网络安全 | 并发问题】Nginx重试机制与幂等性问题分析

未经许可,不得转载。 文章目录 业务背景Nginx的错误重试机制proxy_next_upstream指令配置重试500状态码非幂等请求的重试问题幂等性和非幂等性请求non_idempotent选项的使用解决方案业务背景 在现代互联网应用中,高可用性(HA)是确保系统稳定性的关键要求之一。为了应对服务…

C++入门基础(三)

目录 引用引用概念例子1例子2例子3例子4常引用拓展 引用 引用概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用的变量共用同一块内存空间。 比如&#xff1a;同学A有一个别名为张…

ChatGPT键盘快捷键(按ctrl + /呼出)

文章目录 ChatGPT键盘快捷键- 打开新聊天: Ctrl Shift O- 聚焦聊天输入: Shift Esc- 复制最后一个代码块: Ctrl Shift ;- 复制最后一个回复: Ctrl Shift C- 设置自定义指令: Ctrl Shift I- 切换边栏: Ctrl Shift S- 删除聊天: Ctrl Shift ⌫- 显示快捷方式: Ctrl …

VCS:三步法的仿真流程

相关阅读 VCShttps://blog.csdn.net/weixin_45791458/category_12828763.html 使用三步流程仿真设计涉及三个基本步骤&#xff1a; 分析(Analysis)展开(Elaboration)仿真(Simulation) VCS使用这三个步骤编译任何设计&#xff0c;无论所使用源代码的是HDL、HVL或其他支持的技术…

万字长文解读深度学习——Transformer

文章目录 &#x1f33a;深度学习面试八股汇总&#x1f33a;初识Transformer1. 编码器-解码器架构解码器的额外结构 2. 自注意力机制&#xff08;Self-Attention Mechanism&#xff09;解码器中的注意力机制的2点特殊 3. 位置编码&#xff08;Positional Encoding&#xff09;4.…

花指令例子

如图所示&#xff1a; 指令EB FF的汇编代码为jmp -1&#xff0c;CPU执行到地址处0x6c80c0的指令EB FF时(jmp -1)&#xff0c;EIP为6c80c2, 执行后&#xff0c;EIP为0x6c80c1。但是反汇编器无法自动识别该指令。