织梦网站模板安装本地,wordpress错误怎么解决方法,官方网站建设账务处理,国外cdnpython正则表达式 作者#xff1a;AOAIYI 创作不易#xff0c;如果觉得文章不错或能帮到你学习#xff0c;记得点赞收藏评论一下哦 文章目录python正则表达式一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤总结一、实验目的
学会使用常见的正则表达式
二、…python正则表达式 作者AOAIYI 创作不易如果觉得文章不错或能帮到你学习记得点赞收藏评论一下哦 文章目录python正则表达式一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤总结一、实验目的
学会使用常见的正则表达式
二、实验原理
一、 正则表达式基础
1.1.概念介绍
正则表达式是用于处理字符串的强大工具它并不是Python的一部分。
其他编程语言中也有正则表达式的概念区别只在于不同的编程语言实现支持的语法数量不同。
它拥有自己独特的语法以及一个独立的处理引擎在提供了正则表达式的语言里正则表达式的语法都是一样的。
下图展示了使用正则表达式进行匹配的流程
1.2. 数量词的贪婪模式与非贪婪模式
正则表达式通常用于在文本中查找匹配的字符串。
贪婪模式总是尝试匹配尽可能多的字符
非贪婪模式则相反总是尝试匹配尽可能少的字符。
Python里数量词默认是贪婪的。
例如正则表达式ab*“如果用于查找abbbc”将找到abbb。
而如果使用非贪婪的数量词ab*?“将找到a”。
1.3. 反斜杠的问题
与大多数编程语言相同正则表达式里使用作为转义字符这就可能造成反斜杠困扰。
假如你需要匹配文本中的字符“那么使用编程语言表示的正则表达式里将需要4个反斜杠”\\
第一个和第三个用于在编程语言里将第二个和第四个转义成反斜杠
转换成两个反斜杠\后再在正则表达式里转义成一个反斜杠用来匹配反斜杠\。
这样显然是非常麻烦的。
Python里的原生字符串很好地解决了这个问题这个例子中的正则表达式可以使用r\表示。
同样匹配一个数字的\d可以写成r\d。
三、实验环境
Python 3.6.1以上
PyCharm
四、实验内容
掌握常用的正则表达式是爬虫的基础练习常用的正则表达式。
五、实验步骤
1.在python中有个re包它是专门用来做正则表达式的使用时应先import添加re包。在正则表达式中最常用的是.“和”“”.“代表匹配任意字符”“代表匹配0或多次前面出现的字符。 举例现在有数据abcde我们使用”.来匹配中间的bcd三个字母。
import re data abcde
reg a...e
out re.findall(reg,data)
print(out) 可以在下面看到输出了abcde说明成功用三个.“代替了bcd那么当中间字符不止是三个而是更多时就不能简单的重复”.“了我们应该使用”*。
例如使用.*“来表示0或无限次的”.修改代码为
import re data abcde
reg a.*e
out re.findall(reg,data)
print(out) 输出与上次的结果相同证明匹配成功。 注意“与”“的功能相同区别在于”“可以匹配到0次也就是说匹配的字符可以不出现而”匹配的字符最少要出现一次。
2.^“和”$分别代表匹配字符串起始部分和匹配字符串终止部分。 例如我们定义的规则是匹配出以h开头的字符串。
import re data hadoopandspark
reg ^h.*
out re.findall(reg,data)
print(out) 可以看到我们将开头为h的hadoopandspark匹配出来了如果我们匹配其他开头字母那么该字符串将不会匹配出来。
例如我们定义规则为匹配以a开头的字符串则不会返回结果。
import re
data hadoopandspark
reg ^a.*
out re.findall(reg,data)
print(out) 3.同理的$的用法是匹配终止字符
例如我们匹配以k结尾的字符串将会匹配出hadoopandspark如果改为匹配其他字母则不会返回结果
import re
data hadoopandspark
reg .*k$
out re.findall(reg,data)
print(out) 4.?“也是正则表达式中的一个常用符号它有两种用法一是表示”?前的字符出现0次或1次。
例如北京某地的电话号为010-99999999定义区号和后面号码之间可以存在一个或零个-“当”-多于一个时将不会返回结果。
import re data 010-99999999
data1 01099999999
data2 010--99999999 reg ^010-?\d{8}$ out re.findall(reg,data)
out1 re.findall(reg,data1)
out2 re.findall(reg,data2)
print(out)
print(out1)
print(out2) 第二种用法是它表示非贪婪模式贪婪模式是指只要有符合条件的字符就全部匹配出来它将匹配出所有q非贪婪模式是指只要匹配到一个符合要求的字符就停止不再继续贪婪更多的q。
import re data qqqqqqqaabbaccc
reg ^q
reg1 ^q?
out re.findall(reg,data)
out1 re.findall(reg1,data)
print(out)
print(out1) 5.{N}和{N,M}的用法{N}代表匹配N次前面出现的字符{N,M}代表匹配N~M次前面出现的字符。
例如reg代表匹配两次qreg1代表匹配2次以上的qreg2代表匹配2次以上5次以下的q。
import re
data qqqqqqqaabbacccqq reg ^q{2}
reg1 ^q{2,}
reg2 ^q{2,5} out re.findall(reg,data)
out1 re.findall(reg1,data)
out2 re.findall(reg2,data) print(out)
print(out1)
print(out2)6.|“代表匹配”|“左边或右边的字符”|两边只要有一边成立就可以匹配出来。
例如|“左边匹配以010-开头的前6位字符”|右边匹配以9结尾的后4位字符。
import re
data 010-99999999
reg ^010-.{2}|.{3}9$
out re.findall(reg,data)
print(out) 注意|的左右两侧如果左侧匹配失败则匹配右侧如果右侧匹配失败则匹配左侧。
7.[ ]表示匹配来自字符集的任意单一字符。
例如[136 139 182 158][ ]内包含四个电话号码的前三位在数据中只要满足这四个电话号码中的任意一个就可以匹配出来。
import re
data 13611112222
data1 15833334444 reg [136 139 182 158].*
out re.findall(reg,data)
out1 re.findall(reg,data1) print(out)
print(out1) 8.[^] 表示不匹配 [^]中的内容。
例如我们定义的规则是匹配出以1开头第二位为3、5、8第三位任意第四位不能为1的电话号码。
import re
data 13611112222,15833334444,18255556666 reg 1[3 5 8].[^1]{8}
out re.findall(reg,data) print(out) 9.\s表示匹配任何空白字符\S表示匹配任何非空白字符。
例如\s将匹配出三个空格\S将匹配出其他非空白字符。
import re
data abc 123 ABC - reg \s
reg1 \S out re.findall(reg,data)
out1 re.findall(reg1,data) print(out)
print(out1) 10.\w表示匹配任何字母数字字符\W匹配任何非字母数字字符。
例如\w匹配出了字母和数字\W略过了非字母和数字匹配出了空格和符号。
import re
data abc 123 ABC - * reg \w
reg1 \W out re.findall(reg,data)
out1 re.findall(reg1,data) print(out)
print(out1) 11.\d表示匹配任何十进制数\D表示匹配任何非数字字符。
例如\d匹配出了123\D略过了123匹配出了字母空格和符号。
import re
data abc 123 ABC - * reg \d
reg1 \D out re.findall(reg,data)
out1 re.findall(reg1,data) print(out)
print(out1) 总结
以上就是本文要讲的内容本文介绍了正则表达式的使用正则表达式是用于处理字符串的强大工具它并不是Python的一部分。 其他编程语言中也有正则表达式的概念区别只在于不同的编程语言实现支持的语法数量不同。 它拥有自己独特的语法以及一个独立的处理引擎在提供了正则表达式的语言里正则表达式的语法都是一样的。