正则表达式在Python中的使用
正则表达式
α 简介
正则表达式是用来描述字符串特征的一种文本,例如我们平常使用的搜索关键字就起到了类似的效果,在数据庞大且复杂的文本中提取出我们所需要的信息就需要正则表达式的帮助,因此正则表达式一个重要的应用场景便是爬虫,当我们在提取网站信息的时候,我们所需要的信息大多都在HTML元素中,同时HTML的书写很规范,正则表达式便有了用武之地.
β 正则表达式书写
γ 导入库以及基本函数
Python中的正则表达式功能大多都集成在re模块,使用这些功能函数需要先使用import将模块导入.
基本函数
γ.1 match函数
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none.
函数语法: re.match(pattern, string, flags=0)
pattern: 匹配模式,即我们需要对提取的字符串的正则表达式
string: 目标字符串,即我们要在其中寻找我们需要的信息
flags: 标志位,默认为无约束,用于规范正则表达式的匹配方式,如:是否区分大小写等,之后会详细讲解.
import re
target = "matlab" print(re.match('mat',target)) print(re.match('lab',target))
执行结果:
γ.2 group函数&groups函数
group()在正则表达式中用于获取分段截获的字符串,比如我们书写的正则表达式分为三个部分([a-z])([0-9]) ([a-z]),即匹配小写字母-数字-小写字母 这样的形式的字符串,那么会将这三部分分开存在group()里,需要通过group(i)来访问, 而当我们的正则表达式没有子组要求时,即以一个确定的字符串作为表达式,group()会返回整个匹配结果,而不能通过group(i)来访问.
import re
target = "mat2lab" Re = re.match('([a-z]*)([0-9])',target) Rex = re.match('mat',target) Re.group(0) # 'mat2' Re.group(1) # 'mat' Re.group(2) # '2' Rex.group() # 'mat'
我们不难发现group(0)是 之后的元素的集合
groups()在正则表达式在无子组要求时,如果匹配成功返回一个空元组,若有子组要求的时候会返回所有子组
import re
target = "mat2lab" Re = re.match('([a-z]*)([0-9])',target) Rex = re.match('mat',target) Re.groups() # ('mat', '2') Rex.group() # 'mat'
γ.3 search函数
与match函数类似,但本函数不要求从字符串开头查找,即 ‘atl’ 可以 通过本函数在’matlab’中找到,而match函数不行
import re
target = "mat2lab" Re = re.search('([a-z]*)([0-9])',target) Rex = re.search('at2',target) Re.group(0) # 'mat2' Rex.group() # 'at2' Re.groups() # ('mat', '2') Re.group(1) # 'mat' Re.group(2) # '2'
γ.4 findall函数
findall()函数在网络编程中使用的最为频繁,它用于查找字符串中所有符合表达式形式的字符串,返回一个列表
import re
target = "mat2la1b2" Re = re.findall('([a-z]*)([0-9])',target) # Re 是 list对象 没有group和groups属性哦 print(Re) # [('mat', '2'), ('la', '1'), ('b', '2')]
γ.5 split函数
split函数用于将目标字符串分解成为若干个部分,返回结果形式为列表. 在Python 中 string 对象本身就有split()方法, 不借用 re 模板中的 函数也可以,注意字符串自身并不发生改变.
import re
st = "one day one apple keeps one doctor away" st.split(" ") # ['one', 'day', 'one', 'apple', 'keeps', 'one', 'doctor', 'away'] re.split(' ',st) # ['one', 'day', 'one', 'apple', 'keeps', 'one', 'doctor', 'away']
γ.6 sub函数
sub函数用于·将目标字符串中的某些指定字符串替换成指定字符串,注意字符串自身并不发生改变.
import re
st = "one day one apple keeps one doctor away" re.sub('o[a-z]','ja',st) # 'jae day jae apple keeps jae djatja away'
γ.7 compile函数
compile函数是编译函数,通过预先编译,可以缩短正则表达式的匹配时间,因为未经编译的字符串在匹配过程中需要由解释器来编译,虽然一两次匹配时间很小没法比较,但任何一个很小的数乘以很大的数,二者差异就不可以忽视了.
import time import re
target = 'python1 python2 python3 are all python' pattern = re.compile('([a-z]*)([0-9]*)') # 预编译省时间 start_time_1 = time.time() for i in range(100000): f = pattern.findall(target) end_time_1 = time.time() start_time_2 = time.time() for i in range(100000): g = re.findall(r'([a-z]*)([0-9]*)',target) end_time_2 = time.time() print(end_time_1 - start_time_1) # 0.43962883949279785 print(end_time_2 - start_time_2) # 0.5046467781066895
本文地址:https://blog.csdn.net/qq_44614115/article/details/108855676
上一篇: Node.js快速创建一个访问html文件的服务器
下一篇: 基于眨眼识别的渐冻人辅助打字系统