正则表达式 in the 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
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值