python模块学习(2)——re模块

正则表达式并不是python的一部分,正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。如果已经在其他语言里使用过正则表达式,只需要简单看一看就可以上手了。

下图展示了使用正则表达式进行匹配的流程: 

正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。如果表达式中有量词或边界,这个过程会稍微有一些不同,但也是很好理解的,看下图中的示例以及自己多使用几次就能明白。

python通过re模块提供对正则表达式的支持,在python中使用‘r’解决转义字符带来的困扰,例如r"\n"是由‘\’和‘n‘两个字符组成。正则表达式可以包含特殊和普通字符,对于普通字符很好处理,只需匹配他们,但是对于特殊字符,例如‘|’或‘(‘这样的字符,就要特殊处理了。

  1. 特殊字符:
  • ‘.’

.是默认模式,它能匹配任意字符除了换行符,如果DOTALL标识被指定,将会匹配包括换行符在内的任意字符。

例如

字符串:abcdfgh

正则表达式:a.cdf

匹配结果:abcdf

  • ‘*‘

匹配前一个字符0或无限次。例如ab*将能匹配‘a‘,‘ab‘,‘abbb‘,‘abbbbbbbb‘...

  • ‘?‘

匹配前一个字符0或1次,例如ab?将能匹配‘a‘,‘ab‘

  • *?, +?, ??

‘*‘,‘+‘,‘?‘这些限定符是贪婪的,他们尽可能匹配多的字符,但有时并不希望是这样的,例如<.*>匹配‘<H1>title</H1>’将匹配整个字符串,而我们只希望匹配<H1>。这时我们可以通过在限定符后添加‘?‘使它变为非贪婪的,这样它将匹配尽可能少的字符。使用<.*?>将只匹配‘<H1>‘。

  • ‘\’

转义字符,使用‘\‘之后的特殊字符将成为一个普通的字符,例如字符串中有*号需要匹配,使用‘\*‘或[*]

  • ‘\w‘

匹配Unicode(str)单词字符,包括单词中的大部分字符,同时还包括数字和下划线,如果使用ASCII标识,只有[a-zA-Z0-9]被匹配,这种情况下,最好明确写出需要匹配的字符。例如:

字符串:abcde

表达式:a\wcd

匹配结果:abcd

  • ‘(...)‘

被括起来的表达式将作为分组,从表达式的左边开始每遇到一个分组的左括号‘(’,编号+1.另外分组表达式作为一个整体,可以后接数量词,表达式中的‘|‘仅在该组中有效。例如:(abc){2}匹配 的字符:abcabc;a(123|456)c 匹配的字符:a123c、a456c.

(待积累...)

2. re方法:

re.sub(pattern, repl,
string, count=0, flags=0)

使用repl根据pattern替换string中的字符并返回字符串。如果没有pattern,返回的string没有改变;repl可以是一个字符串或者函数,如果是字符串,转义字符可以被处理;如果repl是一个函数,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。 count用于指定最多替换次数,不指定时全部替换。

re.match

(待积累。。。)

3、match对象

match对象是一次匹配的结果,通常是一个布尔值。它有如下方法和属性:

match方法:

match.group([group1, ...])

返回一个或多个匹配的子组,若只有一个参数,返回一个值,如果有多个参数,则以元组形式返回,如果没有参数。group1默认为0,返回整个匹配,如果groupN参数为0,仍然返回整个匹配字符串,如果返回字符返回超过匹配范围,抛出IndexError异常。

>>> m=re.match(r‘(\w+)(\w+)‘,‘isaac newton,physicists‘)
>>> m.group(0)
‘isaac‘
>>> m.group(1)
‘isaa‘
>>> m.group(2)
‘c‘
>>> m.group(3)
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    m.group(3)
IndexError: no such group
>>> m.group(1,2)
(‘isaa‘, ‘c‘)

python模块学习(2)——re模块,布布扣,bubuko.com

时间: 2024-10-19 21:16:49

python模块学习(2)——re模块的相关文章

python基础学习日志day5-各模块文章导航

python基础学习日志day5---模块使用 http://www.cnblogs.com/lixiang1013/p/6832475.html python基础学习日志day5---time和datetime模块 http://www.cnblogs.com/lixiang1013/p/6848245.html python基础学习日志day5---random模块http://www.cnblogs.com/lixiang1013/p/6849162.html python基础学习日志da

【Python模块学习】sys模块

sys模块的操作如下: 1 sys.argv # 实现从程序外部向程序传递参数. 2 sys.exit([arg]) # 程序中间的退出,arg=0为正常退出. 3 sys.getdefaultencoding() # 获取系统当前编码,一般默认为ascii. 4 sys.setdefaultencoding() # 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 setdefaultencoding('utf8'),此时

【Python模块学习】os模块

OS模块的操作如下: 1 os.getcwd() #获取当前工作目录,即当前python脚本工作的目录路径 2 os.chdir("dirname") #改变当前脚本工作目录:相当于shell下cd 3 os.curdir #返回当前目录: ('.') 4 os.pardir #获取当前目录的父目录字符串名:('..') 5 os.makedirs('dirname1/dirname2') #可生成多层递归目录 6 os.removedirs('dirname1') # 若目录为空,则

python基础学习日志day5--subprocess模块

可以执行shell命令的相关模块和函数有: os.system os.spawn* os.popen*          --废弃 popen2.*           --废弃 commands.*      --废弃,3.x中被移除 以上执行shell命令的相关的模块和函数的功能均在 subprocess 模块中实现,并提供了更丰富的功能 call 父进程等待子进程完成返回退出信息(returncode,相当于Linux exit code) 执行命令,返回状态码,shell=True是表示

Python 模块学习:os模块

Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台.如果是window 则用'nt'表示,对于Linux/Unix用户,它是'posix'. 2.os.getcwd() 函数得到当前工作目录,即当前Python脚本工作的目录路径. 3.os.listdir() 返回指定目录下的所有文件和目录名. >>>os.listdir(os.getcwd()) ['Dj

python模块学习:os模块

一.os模块概述 Python os模块包含普遍的操作系统功能.例如文件的复制.创建文件及文件夹... 二.常用方法 1.os.listdir()   返回指定目录下的所有文件和目录名. 2.os.remove()  删除一个文件. 3.os.system()  运行shell命令. 4.os.path.split()   函数返回一个路径的目录名和文件名 5.os.path.isfile()和os.path.isdir()   函数分别检验给出的路径是一个文件还是目录,返回值分别为Ture或F

python基础学习日志day5--hashlib模块

hashlib模块用于加密操作,代替了md5和sha模块, 主要提供SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法. # -*- coding:utf-8 -*- __author__ = 'shisanjun' import hashlib m=hashlib.md5() #使用MD5算法 m.update(b"hello") #必须加b,申明为byte m.update(b"It is me") print(m.dige

python基础学习日志day5---os模块

python os模块提供对操作系统进行调用的接口. # -*- coding:utf-8 -*-__author__ = 'shisanjun' import os print(os.getcwd())#获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("F:\python运维开发\day4")#改变当前的工作目录:相当于shell下cdprint(os.getcwd())#结果F:\python运维开发\day4 os.chdir(os.curdir)#返回

python基础学习日志day5---logging模块

很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别,下面我们看一下怎么用. 最简单用法 1 2 3 4 5 6 7 8 import logging logging.warning("user [alex] attempt

python自动化测试学习笔记-6urllib模块&amp;request模块

python3的urllib 模块提供了获取页面的功能. urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) -         url:  需要打开的网址 -         data:Post提交的数据 -         timeout:设置网站的访问超时时间 直接用urllib.request模块的urlopen()获取页