python正则表达式处理文本-re模块
python正则表达式处理文本-re模块
1.概述
正则表达式通常用于含有大量文本处理的应用当中。例如,它们经常用作开发者使用的文本编辑程序的搜索模式,包括 vi,emacs 和现代集成开发环境。它们也是 Unix 命令行工具的组成部分,例如 sed、grep 和 awk。很多编程语言是在语法中支持正则表达式(Perl、Ruby、Awk 和 Tcl),但 C、C++ 和 Python 等其他语言,通过扩展库来支持正则表达式。
正则表达式存在多个开源实现,每个实现都共享一个通用的核心语法,但对高级特性有不同的扩展和修改。Python 的 re 库使用的语法基于 Perl 的正则表达式语法,并且有一些特定于 Python 的增强。
尽管「正则表达式」的正式定义仅限于描述正则语言的表达式,但 re 支持的一些扩展已经超出了正则语言的范畴。在这里,「正则表达式」术语有点更通用的感觉,意味着是任何可以被 Python 的 re 模块所描述的表达式。
2.re模块介绍
python中re模块赋予了正则更强的表达能力:
尽管「正则表达式」的正式定义仅限于描述正则语言的表达式,但 re 模块支持的一些扩展已经超出了正则语言的范畴。
在这里,「正则表达式」术语有点更通用的感觉,意味着是任何可以被 Python 的 re 模块所描述的表达式。
re模块结构介绍
re模块由9个常量、12个函数、1个异常构成,下面通过示例详细介绍他们使用方法,应用到开发中解决实际的问题。
re模块常用函数介绍
re模块提供了许多的函数对文本做不同的处理,下面是函数处理文本的职责。
- match函数
使用一个模式匹配文本,如果匹配成功就返回匹配到的内容,否则返回None - compile 函数
用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用 - search函数
扫描整个字符串并返回第一个成功的匹配,如果没有匹配,就返回一个 None。 - findall函数
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。注意: match 和 search 是匹配一次 findall 匹配所有。 - finditer函数
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。 - sub函数
sub是substitute的所写,表示替换,将匹配到的数据进⾏替换。 - subn函数
行为与sub()相同,但是返回一个元组 (字符串, 替换次数)。 - split函数
根据匹配进⾏切割字符串,并返回⼀个列表。
3.re模块常量介绍
3.1.常量介绍
re模块常量是定义在一个继承Int类型的枚举类中,有9个常量,常量的值都是int类型。
class RegexFlag(enum.IntFlag):ASCII = A = sre_compile.SRE_FLAG_ASCII # assume ascii "locale"IGNORECASE = I = sre_compile.SRE_FLAG_IGNORECASE # ignore caseLOCALE = L = sre_compile.SRE_FLAG_LOCALE # assume current 8-bit localeUNICODE = U = sre_compile.SRE_FLAG_UNICODE # assume unicode "locale"MULTILINE = M = sre_compile.SRE_FLAG_MULTILINE # make anchors look for newlineDOTALL = S = sre_compile.SRE_FLAG_DOTALL # make dot match newlineVERBOSE = X = sre_compile.SRE_FLAG_VERBOSE # ignore whitespace and comments# sre extensions (experimental, don't rely on these)TEMPLATE = T = sre_compile.SRE_FLAG_TEMPLATE # disable backtrackingDEBUG = sre_compile.SRE_FLAG_DEBUG # dump pattern after compilation
1.IGNORECASE
语法: re.IGNORECASE 或简写为 re.I
作用: 进行忽略大小写匹配
下面的例子查询match时会将大写和小写都查询出来
import repattern = 'match'
text = 'Does this text match the pattern, Match text'print('默认区分大小写:', re.findall(pattern, text), end='\n')print('IGNORECASE属性忽略大小写', re.findall(pattern, text, re.IGNORECASE))
查找文本时使用re.IGNORECASE
常量忽略了match的大小写,大写和小写的match都会查询到。
默认区分大小写: ['match']
IGNORECASE忽略大小写 ['match', 'Match']
2.ASCII码
语法: re.ASCII 或简写为 re.A
作用: 顾名思义,ASCII表示ASCII码的意思,让 \w, \W, \b, \B, \d, \D, \s 和 \S 只匹配ASCII,而不是Unicode。
import re
pattern = r'\w+'
text = 'a白日依山尽b,黄河入海流c'print('Unicode模式查找结果:', re.findall(pattern, text))print('ASCII模式查找结果:', re.findall(pattern, text, re.ASCII))
在默认匹配模式下\w+匹配到了所有字符串,而在ASCII模式下,只匹配到了a、b、c(ASCII编码支持的字符)。
Unicode模式查找结果: ['a白日依山尽b', '黄河入海流c']
ASCII模式查找结果: ['a', 'b', 'c']
3.DOTALL
语法: re.DOTALL 或简写为 re.S
作用: DOT表示.
,ALL表示所有,连起来就是.
匹配所有,包括换行符\n。默认模式下.
是不能匹配行符\n
的。
import re
pattern = r'.*'
text = '白日依山尽,\n黄河入海流'
print('默认匹配:', re.findall(pattern, text))print('.匹配所有:', re.findall(pattern, text, re.DOTALL))
在默认匹配模式下.
并没有匹配换行符\n,而是将字符串分开匹配;而在re.DOTALL模式下,换行符\n与字符串一起被匹配到。
默认匹配: ['白日依山尽,', '', '黄河入海流', '']
.匹配所有: ['白日依山尽,\n黄河入海流', '']
4. MULTILINE
语法: re.MULTILINE 或简写为 re.M
作用: 多行模式,当某字符串中有换行符\n,默认模式下是不支持匹配下一行行头匹配。而多行模式下是支持匹配行开头的。
正则表达式中^表示匹配行的开头,默认模式下它只能匹配字符串的开头;而在多行模式下,它还可以匹配 换行符\n后面的字符。
注意:正则语法中^匹配行开头、\A匹配字符串开头,单行模式下它两效果一致,多行模式下\A不能识别\n。
import re
pattern = r'^黄'
text = '白日依山尽,\n黄河入海流'
print('默认匹配:', re.findall(pattern, text))
print('多行匹配行头', re.findall(pattern, text, re.MULTILINE))
多行模式匹配到了第二行开头黄
字符
默认匹配: []
多行匹配行头 ['黄']
5. VERBOSE
语法: re.VERBOSE 或简写为 re.X
作用: 详细模式,可以在正则表达式中加注解!
import re
pattern = r'''
白日 # 白天的太阳
'''
text = '白日依山尽,\n黄河入海流'
print('默认匹配:', re.findall(pattern, text))
print('详细模式匹配注释', re.findall(pattern, text, re.VERBOSE))
默认模式下并不能识别正则表达式中的注释,而详细模式是可以识别的。
默认匹配: []
详细模式匹配注释 ['白日']
6.LOCALE
语法: re.LOCALE 或简写为 re.L
作用: 由当前语言区域决定 \w, \W, \b, \B 和大小写敏感匹配,这个标记只能对byte样式有效。这个标记官方已经不推荐使用,因为语言区域机制很不可靠,它一次只能处理一个 "习惯”,而且只对8位字节有效。
7.UNICODE
语法: re.UNICODE 或简写为 re.U
作用: 与 ASCII 模式类似,匹配unicode编码支持的字符,但是 Python 3 默认字符串已经是Unicode,所以有点冗余。
8. DEBUG
语法: re.DEBUG
作用: 显示编译时的debug信息。
import re
pattern = r'白日'
text = '白日依山尽,\n黄河入海流'
print('默认匹配:', re.findall(pattern, text))
print('debug模式', re.findall(pattern, text, re.DEBUG))
运行结果
默认匹配: ['白日']
LITERAL 30333
LITERAL 260850. INFO 10 0b11 2 2 (to 11)prefix_skip 2prefix [0x767d, 0x65e5] ('白日')overlap [0, 0]
11: LITERAL 0x767d ('白')
13. LITERAL 0x65e5 ('日')
15. SUCCESS
debug模式 ['白日']
9.TEMPLATE
语法: re.TEMPLATE 或简写为 re.T
作用:disable backtracking(禁用回溯)
3.2.常量组合使用
常量可叠加使用,因为常量值都是2的幂次方值,所以是可以叠加使用的,叠加时请使用 | 符号,请勿使用+ 符号!
import repattern = '^match'
text = 'Does this text match the pattern, \nMatch text'print('默认区分大小写:', re.findall(pattern, text), end='\n')print('多个模式组合使用', re.findall(pattern, text, re.IGNORECASE | re.MULTILINE))
上面使用了忽略大小写和多行模式组合查询出Match开头的字符。
默认区分大小写: []
IGNORECASE属性忽略大小写 ['Match']
4.re模块函数
re模块有12个函数可以查找匹配文本,根据他们的功能分类如下:
4.1.查找一个匹配项
查找并返回一个匹配项的函数有3个:search、match、fullmatch,他们的区别分别是
- search: 查找任意位置的匹配项
- match: 必须从字符串开头匹配
- fullmatch: 整个字符串与正则完全匹配
1.查找一个匹配项示例
这个例子分别使用search
、match
、fullmatch
三个函数测试查询一个匹配项的区别。
import re
pattern = '白日'
text = 'A白日依山尽,白日依山尽'print('search:', re.search(pattern, text).group())print('match', re.match(pattern, text))print('fullmatch:', re.fullmatch(pattern, text))
search函数在字符串任意位置匹配,符合表达式模式就会返回结果。
match函数需要从头匹配,在文本中开头有个A
字符,因此他没有匹配到结果。
fullmatch函数匹配的内容需要与文本完全相同,因此返回的结果也是空。
search: 白日
match None
fullmatch: None
2.查询结果处理函数
使用search
、match
、fullmatch
三个函数查询字符串返回值是一个Match(Generic[AnyStr])
类型对象,在该对象中提供了一些方法用来处理返回值。
下面介绍下处理匹配结果常用方法
- start:获取匹配结果开始索引地址
- end:获取匹配结果结束索引地址
- group:分组截取字符串
import re
pattern = '白日'
text = '白日依山尽,白日依山尽'search_result = re.search(pattern, text)
print(search_result)
# search 获取查询开始和结尾索引
s = search_result.start()
e = search_result.end()# search_result.re.pattern 获取匹配模式, search_result.string获取匹配的文本
print('Found "{}"\nin "{}"\nfrom {} to {} ("{}")'.format(search_result.re.pattern, search_result.string, s, e, text[s:e]))print('gourp 分组显示查询结果', search_result.group())
print('span 返回查询结果起止下标:', search_result.span())
运行结果
<re.Match object; span=(0, 2), match='白日'>
Found "白日"
in "白日依山尽,白日依山尽"
from 0 to 2 ("白日")
gourp 分组显示查询结果 白日
span 返回查询结果起止下标: (0, 2)
4.2.查找多个匹配项
查找多项函数主要有:findall函数
与 finditer函数
两个方法基本类似,只不过一个是返回列表,一个是返回迭代器。我们知道列表是一次性生成在内存中,而迭代器是需要使用时一点一点生成出来的,节省内存。
- findall: 从字符串任意位置查找,返回一个列表
- finditer:从字符串任意位置查找,返回一个迭代器
import re
pattern = '白日'
text = '白日依山尽,白日依山尽'search_sult = re.search(pattern, text)
print('查找一个匹配项:', search_sult.group())findall_sult = re.findall(pattern, text)
print('查找多个匹配项:', findall_sult)
查找同一个文本,使用search查找结果只有一个。使用findall查找所有符合条件的值。
查找一个匹配项: 白日
查找多个匹配项: ['白日', '白日']
4.3.分割文本
re.split(pattern, string, maxsplit=0, flags=0) 函数作用就是根据分割模式对文本进行分隔,他不是查找字符。
- pattern相当于str.split()中的sep,分隔符的意思,不但可以是字符串,也可以为正则表达式
- maxsplit表示最多进行分割次数,
- flags表示模式,就是上面我们讲解的常量
1.不限制分割次数
import re
pattern = '[a-b]'
text = '1,2,3,4,a,5,6,7,8,b,9,10,11,12'split_sult = re.split(pattern, text, maxsplit=0, flags=re.IGNORECASE)
print('split分割', split_sult)
# 列表索引切片操作获取数据
print(split_sult[0])
print(split_sult[:2])
上面使用[a-b]
模式分割文本,maxsplit设置为0表示为不显示分割次数,split函数将在文本中遇到a或b字符就会将文本分割一次,返回的结果是一个列表,可以通过索引获取每个值。
split分割 ['1,2,3,4,', ',5,6,7,8,', ',9,10,11,12']
1,2,3,4,
['1,2,3,4,', ',5,6,7,8,']
2.限制分割次数
import re
pattern = '[a-b]'
text = '1,2,3,4,a,5,6,7,8,b,9,10,11,12'split_sult = re.split(pattern, text, maxsplit=1, flags=re.IGNORECASE)
print('split分割', split_sult)
设置split分割一次,下面分割后列表中有两个元素。
split分割 ['1,2,3,4,', ',5,6,7,8,b,9,10,11,12']
4.4.替换
替换主要有sub函数 与 subn函数
re.sub(pattern, repl, string, count=0, flags=0) 函数:
- repl替换掉string中被pattern匹配的字符
- count表示最大替换次数
- flags表示正则表达式的常量
re.subn(pattern, repl, string, count=0, flags=0) 函数与 re.sub函数 功能一致,只不过返回一个元组 (字符串, 替换次数)
1.sub替换文本
sub函数中的入参:repl替换内容既可以是字符串,也可以是一个函数哦! 如果repl为函数时,只能有一个入参:Match匹配对象。
import re
pattern = '在'
repl = '尽'
text = '白日依山在,黄河入海流'
sub_sult = re.sub(pattern, repl, text)
print('sub替换文本:',sub_sult)
4.5.编译正则模板
re模块执行过程
re模块匹配文本时需要执行两个步骤,编译正则表达式,然后用表达式匹配文本。
为什么要预编译表达式
如果每次匹配文本都要编译一次正则表达式效率会降低,因此我们可以可通过compile
函数预编译表达式,每次匹配文本时就省去了编译步骤。
编译表达式对象函数
compile函数 与 template函数 将正则表达式的样式编译为一个 正则表达式对象 ,这个对象与re模块有同样的正则函数。
注意
不论你是否使用预编译表达式,python在re模块的源码中默认使用compile预编译模式执行匹配文本。
查看 findall(), search(), match()的源码
def search(pattern, string, flags=0):"""Scan through string looking for a match to the pattern, returninga Match object, or None if no match was found."""# 调用 _compile函数,编译表达式,然后在调用search查询文本return _compile(pattern, flags).search(string)
1.compile函数编译表达式
import re
pattern = '白日'
# 预编译表达式
pattern_obj = re.compile(pattern)
text = '白日依山尽,白日依山尽'compile_sult = pattern_obj.search(text).group()
print('编译正则模板:',compile_sult)
运行结果
编译正则模板: 白日
2.template函数
template函数 与 compile函数 类似,只不过是增加了我们之前说的re.TEMPLATE 模式,我们可以看看源码。
def template(pattern, flags=0):"Compile a template pattern, returning a Pattern object"return _compile(pattern, flags|T)
4.6.转义特殊字符
re.escape(pattern) 可以转义正则表达式中具有特殊含义的字符,比如:.
或者 *
import re
pattern = '白日*'
text = '白日*依山尽,黄河.入海流'
search_sult = re.search(pattern, text)
print('search查询结果:', search_sult.group())# 输出转义字符
escape_sult = re.escape(pattern)
print('escape转义字符输出结果:', escape_sult)
使用普通的search函数输出时没有将*
特殊字符输出,escape函数将*
特殊字符转义后输出,但是它的输出显示转义有问题在*
前面加上了\
因此不建议使用它转义,还是手动转义好。
search查询结果: 白日
escape转义字符输出结果: 白日\*
下面是在表达式中手动对特殊字符转义。
import re
# 手动转义
pattern = '白日\*'
text = '白日*依山尽,黄河.入海流'
search_sult = re.search(pattern, text)
print('search查询结果:', search_sult.group())
运行结果符合我们查找的结果
search查询结果: 白日*
4.7.清除正则表达式缓存
re.purge() 函数作用就是清除 正则表达式缓存,具体有什么缓存呢?我们先看看源码
def purge():"Clear the regular expression caches"_cache.clear()_compile_repl.cache_clear()
5.正则语法
使用好re模块解决工作中遇到的问题,除了掌握re模块提供的函数,还要掌握正则本身的语法。
正则语法是标准的语法在网上也是非常容易找到,这里提供了菜鸟教程的正则语法,方便在工作中查阅正则语法。
菜鸟正则语法:https://www.runoob.com/regexp/regexp-syntax.html
相关文章:
python正则表达式处理文本-re模块
python正则表达式处理文本-re模块 1.概述 正则表达式通常用于含有大量文本处理的应用当中。例如,它们经常用作开发者使用的文本编辑程序的搜索模式,包括 vi,emacs 和现代集成开发环境。它们也是 Unix 命令行工具的组成部分,例如…...
换了固态硬盘需要重装系统吗?教你如何实现不重装系统!
电脑大家都用过嘛,如果您的计算机装的还是机械硬盘,想必阁下肯定是修身养性的高手,因为在这个浮躁的社会中,是很少有人能够忍受5分钟甚至更久的开机时间的,不仅开机慢,应用程序的响应速度也很慢,…...
网上医疗预约挂号系统
技术:Java、JSP等摘要:网上医疗预约挂号系统是主要是对居民的保健、护理、疾病预防等健康信息实行有效的预约挂号管理。医疗机构为居民建立完整的健康档案,安排体检以及实施免疫等预防措施。而基于Web的远程保健平台以网上医疗预约挂号系统为…...
专题:一看就会的C++类模板讲解 (1)
目录 一.类模板的作用 二.类模板的定义: 三.类模板的声明格式: 四.类模板对象 五.再举一个例子 一.类模板的作用 面向对象的程序设计编程实践中,我们可能会面临这样的问题:要实现比较两个数的大小。明明比较两个数的方法都一样…...
什么是“奥卡姆剃刀”,如何用“奥卡姆剃刀”解决复杂问题?复杂问题简单化
什么是“奥卡姆剃刀”,如何用“奥卡姆剃刀”解决复杂问题?复杂问题简单化问题什么是“奥卡姆剃刀”?如何使用“奥卡姆剃刀”解决问题复杂问题简单化“汉隆剃刀”小结问题 假设你在夜空中看到一颗闪闪发光的「不明飞行物」,你认为这会是什么呢…...
角谷定理(递归)
已知有角谷定理: 输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:例如数据22的变化过程ÿ…...
数学小课堂:微积分复盘(高等数学本质上是对趋势的动态描述,是对各种相关性抽象的表述。)
文章目录 引言I 复盘1.1 概念和表述1.2 现实与虚构1.3 有穷和无穷1.4 静态和动态1.5 直觉和逻辑II 通过数学逻辑,理解人生。2.1 精明与聪明2.2 朋友和理性的对手2.3 攒钱和赚钱2.4 荣誉和财富引言 高等数学本质上是对趋势的动态描述,是对各种相关性抽象的表述。 I 复盘 1.…...
JAVA线程池原理详解一
JAVA线程池原理详解一 一. 线程池的优点 线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。 二…...
Windows平台Unity Camera场景实现轻量级RTSP服务和RTMP推送
技术背景随着VR技术在医疗、军事、农业、学校、景区、消防、公共安全、研学机构、展厅展馆,商场等场所普及,开发者对Unity平台下的直播体验提出了更高的要求。技术实现Unity平台下的RTMP推流、RTMP、RTSP播放前几年已经覆盖了Windows、Linux、Android、i…...
LSB 题解
今天来刷一道Misc的题目,LSB原理进行图片隐写 LSB原理 LSB是一种利用人类视觉的局限性设计的幻术 PNG和BMP图片中的图像像素一般是由RGB(RED红 GREEN绿 BLUE蓝)三原色组成 记住,JPG图片是不适合使用LSB隐写的,JPG图片对像数进行了有损压缩…...
离线部署docker与镜像
离线部署docker与镜像 1.离线部署docker 1).在docker官网上下载,合适的安装文件 本次使用的是“docker-20.10.9.tgz ” 下载地址:https://download.docker.com/linux/static/stable/x86_64/ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下…...
Linux文件系统介绍(上)
使用 Linux 系统时,需要作出的决策之一就是为存储设备选用什么文件系统。大多数 Linux 发行版在安装时会非常贴心地提供默认的文件系统,大多数入门级用户想都不想就用了默认的那个。 使用默认文件系统未必就不好,但了解一下可用的选择有时也会…...
创建SpringBoot注意事项
作为一个java小白,你是否因为创建SpringBoot项目那些莫名其妙的错误搞得头皮发麻。不要慌张,这篇文章能帮你解决90%的问题【持续更新…】 本文结合创建SpringBoot项目的完整过程来讲 在idea中新建项目 虽然SpringBoot项目是由maven内核组成的࿰…...
2023年全国最新二级建造师精选真题及答案9
百分百题库提供二级建造师考试试题、二建考试预测题、二级建造师考试真题、二建证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 11.关于施工合同违约赔偿损失范围的说法,正确的是()。 A.…...
解决MySQL的 Row size too large (> 8126).
📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:无尽的折腾后,终于又回到…...
最优传输问题和Sinkhorn
最优传输问题 假设有M堆土,每堆土的大小是ama_mam,有N个坑,每个坑的大小是bnb_nbn,把单位土从土堆m运送到坑n的代价是c(m,n)c(m,n)c(m,n),如何找到一种运输方法填满坑,并且代价最小,这就是…...
Netty核心组件EventLoop源码解析
源码解析目标 分析最核心组件EventLoop在Netty运行过程中所参与的事情,以及具体实现 源码解析 依然用netty包example下Echo目录下的案例代码,单我们写一个NettyServer时候,第一句话就是 EventLoopGroup bossGroup new NioEventLoopGroup(…...
排障命令-汇总
目录 日志查询 1. grep 2. zgrep cpu 1. top 内存 1. free tcp相关 1. netstat 2. ulimit 3. lsof jvm常用 1. jps 2. jinfo 3. jstack 4. jmap 5. jstat 进制转换 1. 十进制转16进制 日志查询 1. grep 定义:(global regular expression) 命令用于查…...
python+pytest接口自动化(4)-requests发送get请求
python中用于请求http接口的有自带的urllib和第三方库requests,但 urllib 写法稍微有点繁琐,所以在进行接口自动化测试过程中,一般使用更为简洁且功能强大的 requests 库。下面我们使用 requests 库发送get请求。requests库简介requests 库中…...
开源电子书工具Calibre 6.3 发布
Calibre 开源项目是 Calibre 官方出的电子书管理工具。它可以查看,转换,编辑和分类所有主流格式的电子书。Calibre 是个跨平台软件,可以在 Linux、Windows 和 macOS 上运行。Calibre 6.3 正式发布,此次更新内容如下:新…...
C++ STL:适配器 Adapter
文章目录1、容器适配器1.1、stack1.2、queue1.3、priority_queue2、迭代器适配器2.1、插入迭代器2.2、反向迭代器2.3、流迭代器3、函数适配器3.1、* bindbind 使用方法bind 简化原理3.2、mem_fn适配器就是接口,对容器、迭代器、算法进行包装,但其实质还是…...
防抖和节流
防抖和节流的区别?防抖:触发高频事件后n 秒内 函数只会执行一次,如果n秒内 高频事件在在次触发,则会重新计算节流:高频事件触发,但在n 秒内 只会执行一次,所以节流会稀释函数的执行频率下面就是…...
vue3 微信扫码登录及获取个人信息实现的三种方法
一、流程: 微信提供的扫码方式有两种,分别是: 跳转二维码扫描页面 内嵌式二维码根据文档我们可以知道关于扫码授权的模式整体流程为: 1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站&…...
Java8 新特性强大的Stream API
一、Stream API 说明 Java8中有两大最为重要的改变。第一个是 Lambda 表达式;另外一个则是 Stream API。 Stream API ( java.util.stream) 把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充,因为Stream API可以极大提供Ja…...
day22_IO
今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、缓冲流 三、字符流 四、缓冲字符流 五、匿名内部类 零、 复习昨日 File: 通过路径代表一个文件或目录 方法: 创建型,查找类,判断类,其他 IO …...
第三十八章 linux-并发解决方法二(信号量)
第三十八章 linux-并发解决方法二(信号量) 文章目录第三十八章 linux-并发解决方法二(信号量)信号量的定义DOWN操作UP操作相对于自旋锁,信号量的最大特点是允许调用它的线程进入睡眠状态这意味着试图获得某一信号的进程…...
数据结构-考研难点代码突破(C++实现树型查找 - B树插入与遍历,B+树基本概念)
数据结构(C)[B树(B-树)插入与中序遍历,效率分析]、B树、B*树、B树系列应用 文章目录1. B树B树的插入与删除流程2. B树(MySQL)3. B树与B树对比4. C实现B树插入,中序遍历1. B树 B树类…...
Python可视化界面编程入门
Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sys from PyQt5.QtWidgets import QWidget,QApplication #导入两个类来进行程序界面编程if __name__"__main__":#创建一个Appl…...
基于Java+SpringBoot+Vue前后端分离书店购书系统设计与实现
博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品:《微服务实战》专栏是本人的实战经验总结,《Spring家族及…...
Android:截屏/视频截图
需求描述 实现截取Android应用当前界面的功能,需包含界面中视频(此博客的参考代码以存储在设备本地的视频为例,未检验在线视频的情况)当前的播放帧截图。 调研准备 首先应用需要获取设备存储的读写权限,需要在Andro…...
中盛浩瀚建设有限公司网站/指数函数公式
题意:给出sum和n个数,找出满足m(m<n)个数相加等于sum。 思路:dfs. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid1258 View Code 1 #include <cstdio>2 #include <cstring>3 #incl…...
内网穿透做网站/口碑营销的定义
PowerDesigner常用功能:1:把SQL脚步导入PowerDesigner打开powerdesigner,选择File --> Reverse Engineer --> Database……Model name随便写,我填的是wpblog,DBMS选MySQL 5.0然后确定在Selection选项卡中选&…...
野外美食网站设计欣赏/友情链接seo
现象:苹果Air A1466笔记本安装Windows 7系统后,安装官网对应型号的bootcamp后,重启机器,在Windows滚动条完成后随即进入黑屏状态,安全模式能够进入,在安全模式下卸载删除显卡驱动后,正常模式能够…...
如何做好政府门户网站建设/百度投诉中心人工电话
每日感悟: 当把努力养成一种习惯时,说明你已经改变了很多。 前言 使用python进行格式化输出时,问题遇到一些小问题,所以彻底做一次大总结。 在python中进行格式化输出有两种方式: 百分号方式、Format方式 (…...
网站优化有哪些/公司网站搭建
数据链路层(一)3.1 使用点对点信道的数据链路层3.1.1 数据链路层和帧数据发送模型数据链路层的信道类型数据链路层使用的信道主要有以下两种类型:点对点信道。这种信道使用一对一的点对点通信方式。广播信道。这种信道使用一对多的广播通信方式,因此过程…...
vs做网站怎么调试/广告加盟
C语言函数传参到底有几种?!就一种, 按值传递!首先, C语言里不存在引用传递的方式(注释掉的ex3,编辑就过不了).习惯说的按值传递和地址传递实质上都是值传递,只不过前者传的是int值,后者传的是指针值.看代码就一目了然了.//// main.c// exchange//// Created by cbd on 16/8/16…...