欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

正则表达式在Python中的使用

程序员文章站 2022-03-11 16:21:19
正则表达式α 简介   正则表达式是用来描述字符串特征的一种文本,例如我们平常使用的搜索关键字就起到了类似的效果,在数据庞大且复杂的文本中提取出我们所需要的信息就需要正则表达式的帮助,因此正则表达式一个重要的应用场景便是爬虫,当我们在提取网站信息的时候,我们所需要的信息大多都在HTML元素中,同时HTML的书写很规范,正则表达式便有了用武之地.β 正则表达式书写基本语法请戳这里γ 导入库以及基本函数     Python中的正则表达式功能大多都集成在re模块,使用这些功能函数需要先使用impor...

正则表达式

α 简介

正则表达式是用来描述字符串特征的一种文本,例如我们平常使用的搜索关键字就起到了类似的效果,在数据庞大且复杂的文本中提取出我们所需要的信息就需要正则表达式的帮助,因此正则表达式一个重要的应用场景便是爬虫,当我们在提取网站信息的时候,我们所需要的信息大多都在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)) 

执行结果:

正则表达式在Python中的使用

γ.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