Python 正则模块详情

目录
  • 1、正则表达式的装饰符
  • 2、查找单个匹配项
    • 2.2 group
    • 2.3 search
    • 2.4 fullmatch
    • 2.5 匹配对象
  • 3、查找多个匹配项
    • 3.1 compile
    • 3.2 findall
    • 3.3 finditer
  • 4、分割split
    • 4.1 替换
      • 4.1.1 sub
      • 4.1.2 subn
    • 4.2 escape
    • 4.3 purge

Python中提供了操作正则表达式的模块,即re模块。

1、正则表达式的装饰符

修饰符 描述 完整名称
re.I 使匹配对大小写不敏感 re.IGNORECASE
re.A 让 \w, \W, \b, \B, \d, \D, \s 和 \S 只匹配ASCII,而不是Unicode re.ASCII
re.L 做本地化识别(locale-aware)匹配 re.LOCALE
re.M 多行匹配,影响 ^ 和 $,多行模式下是支持匹配行开头 re.MULTILINE
re.S 使 . 匹配包括换行在内的所有字符 e.DOTALL
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. re.UNICODE
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

2、查找单个匹配项

2.1 match

re.match 如果 string 开始的0或者多个字符匹配到了正则表达式样式,就返回一个相应的匹配对象 。 如果没有匹配,就返回 None ;注意它跟零长度匹配是不同的。

语法格式:

re.match(pattern, string, flags=0)

  • pattern:匹配的正则表达式
  • string:要匹配的字符串。
  • flags:标志位,用于控制正则表达式的匹配方式,

如:是否区分大小写,多行匹配等等。

匹配成功re.match方法返回一个匹配的对象,否则返回None。

示例代码:

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/30
"""
import re
string1 = "hello python"
string2 = "hell5o python"
pattern = r"[a-z]+\s\w+"  # a-z出现1次到任意次加一个\s加任意字符出现1次到任意次
print(re.match(pattern, string1))  # <re.Match object; span=(0, 12), match='hello python'>
print(re.match(pattern, string2))  # None

开局导入re模块,r""表示为一个正则表达式

因为string2中间出现了一个数字5 所以不匹配

2.2 group

re.group是从Match对象中获取结果的,不过不分组默认为0,分组索引则从0开始(0是完整的一个匹配),如果多个分组,则第一个分组是1;也可以为其命名使用

示例代码:

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/30
"""
import re
string1 = "hello python"
string2 = "hell5o python"
pattern = r"[a-z]+\s\w+"
pattern1 = r"(\w+)(\s)(\w+)"
pattern2 = r"(?P<first>\w+\s)(?P<last>\w+)"  # 命名分组
print(re.match(pattern, string1))  # <re.Match object; span=(0, 12), match='hello python'>
print(re.match(pattern, string1).group())  # hello python
print(re.match(pattern, string2))  # None
print(re.match(pattern1, string2).group(0))  # hell5o python
print(re.match(pattern1, string2).group(1))  # hell5o
print(re.match(pattern1, string2).group(2))  # 这里匹配的是那个空格
print(re.match(pattern1, string2).group(3))  # python
print(re.match(pattern2, string2).group("last"))  # python

2.3 search

re.search 扫描整个字符串找到匹配样式的第一个位置,并返回一个相应的匹配对象 。如果没有匹配,就返回一个 None ; 注意这和找到一个零长度匹配是不同的。语法结构和match是一样的

示例代码:

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/30
"""
import re
string = "Hi World Hello python"
pattern = r"Hello python"
print(re.search(pattern, string).group())  # Hello python
print(re.match(pattern, string))  # None

两者的区别:

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None,而 re.search匹配整个字符串,直到找到一个匹配。

2.4 fullmatch

re.fullmatch如果整个 string 匹配这个正则表达式,就返回一个相应的匹配对象 。 否则就返回 None ; 注意跟零长度匹配是不同的。

语法格式跟上面的也是一样的

示例代码:

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/30
"""
import re
string = "Hi World Hello python"
pattern = r"Hi World Hello python"
pattern1 = r"hi World hello python"

print(re.fullmatch(pattern, string))  # <re.Match object; span=(0, 21), match='Hi World Hello python'>
print(re.fullmatch(pattern1, string))  # None

三者的区别:

  • match:字符串开头匹配
  • search:查找任意位置的匹配项
  • fullmatch:整个字符串要与正则表达式完全匹配

2.5 匹配对象

匹配对象总是有一个布尔值 True。如果没有匹配的话match()search() 返回 None 所以可以简单的用 if 语句来判断是否匹配

示例代码:

import re
string = "Hi World Hello python"
pattern = r"Hello python"
match1 = re.search(pattern, string)
match2 = re.match(pattern, string)
if match1:
    print(match1.group())  # Hello python

if match2:  # 因为match2的值为none所以不执行
    print(match2.group())

3、查找多个匹配项

3.1 compile

re.compile将正则表达式的样式编译为一个正则对象,可以用于匹配

语法结构:

re.compile(pattern, flags=0)

  • pattern: 匹配的正则表达式
  • flags: 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

3.2 findall

re.findall在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。与match search 不同的是 match search 是匹配一次 findall 匹配所有。

语法结构:

re.findall(string[, pos[, endpos]])

  • string:待匹配的字符串。
  • pos:可选参数,指定字符串的起始位置,默认为 0。
  • endpos:可选参数,指定字符串的结束位置,默认为字符串的长度

3.3 finditer

pattern string 里所有的非重复匹配,返回为一个迭代器保存了匹配对象 。 *string*从左到右扫描,匹配按顺序排列。空匹配也包含在结果里。

语法结构同match

示例代码:

import re
from collections.abc import Iterator  # 导入判断是否为迭代器的对象
string = "hello python hi javascript"
pattern = r"\b\w+\b"
pattern_object = re.compile(r"\b\w+\b")
print(type(pattern_object))  # <class 're.Pattern'>

findall = pattern_object.findall(string)
for i in findall:
    print(i)

finditer = re.finditer(pattern, string)
# 判断是否为迭代器
print(isinstance(finditer, Iterator))  # True
for _ in range(4):
    finditer1 = finditer.__next__()  # 取出下一个值
    print(finditer1.group())
'''
--循环结果--
hello
python
hi
javascript
'''

如果有超大量的匹配项的话,返回finditer的性能要优于findall,这就是列表和迭代器的区别。

4、分割split

re.split方法按照能够匹配的子串将字符串分割后返回列表

语法结构:

re.split(pattern, string[, maxsplit=0, flags=0])

  • pattern:匹配的正则表达式
  • string:分隔符。
  • maxsplit:分隔次数,maxsplit=1分隔一次,默认为 0,不限制次数。
  • flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

示例代码:

import re
string = '''hello hi    good morning
goodnight
python
javascript
Linux
'''
pattern = r'\s+'  # 以空格回车制表符为回车符
print(re.split(pattern, string))  # 不限制次数分隔
# ['hello', 'hi', 'good', 'morning', 'goodnight', 'python', 'javascript', 'Linux', '']
print(re.split(pattern, string, 5))  # 分隔5次
# ['hello', 'hi', 'good', 'morning', 'goodnight', 'python\njavascript\nLinux\n']

str模块的split不同的是,re模块的split支持正则

4.1 替换

4.1.1 sub

re.sub用于替换字符串中的匹配项

语法结构:

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

  • pattern : 正则中的模式字符串。
  • repl : 替换的字符串,也可为一个函数。
  • string : 要被查找替换的原始字符串。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
  • flags : 编译时用的匹配模式,数字形式。

到这里就可以完成一个某手的评论区,修改不良评论的小案例

import re
string = input("请输入评论:")
pattern = r"[美丽可爱大方]{1}"  # 检测的字符
print(re.sub(pattern, "萌", string))

效果图:

4.1.2 subn

行为与 sub() 相同,但是返回一个元组 (字符串, 替换次数).

4.2 escape

re.escape(pattern)转义 pattern 中的特殊字符。例如正则里面的元字符.

示例代码:

import re
pattern = r'\w\s*\d\d.'
# 打印pattern的特殊字符
print(re.escape(pattern))  # \w\s*\d\d.

任意可能包含正则表达式元字符的文本字符串进行匹配,它就是有用的,不过容易出现错误,手动转义比较好

4.3 purge

re.purge()清除正则表达式的缓存。

到此这篇关于Python 正则模块详情的文章就介绍到这了,更多相关Python 正则模块内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python3中正则模块re.compile、re.match及re.search函数用法详解

    本文实例讲述了Python3中正则模块re.compile.re.match及re.search函数用法.分享给大家供大家参考,具体如下: re模块 re.compile.re.match. re.search re 模块官方说明文档 正则匹配的时候,第一个字符是 r,表示 raw string 原生字符,意在声明字符串中间的特殊字符不用转义. 比如表示 '\n',可以写 r'\n',或者不适用原生字符 '\n'. 推荐使用 re.match re.compile() 函数 编译正则表达式模式,

  • Python爬虫实现网页信息抓取功能示例【URL与正则模块】

    本文实例讲述了Python爬虫实现网页信息抓取功能.分享给大家供大家参考,具体如下: 首先实现关于网页解析.读取等操作我们要用到以下几个模块 import urllib import urllib2 import re 我们可以尝试一下用readline方法读某个网站,比如说百度 def test(): f=urllib.urlopen('http://www.baidu.com') while True: firstLine=f.readline() print firstLine 下面我们说

  • python3正则模块re的使用方法详解

    一.正则 1.正则表达式定义 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行. 2.目的和特点 给定一个正则表达式和另一个字符串,我们可以达到如下的目的: 给定的字符串是否符合正则表达式的过滤逻辑(称作"匹配"): 可以通过正则表达式,从字符串中获取我们想要的特定部分.

  • Python 正则模块详情

    目录 1.正则表达式的装饰符 2.查找单个匹配项 2.2 group 2.3 search 2.4 fullmatch 2.5 匹配对象 3.查找多个匹配项 3.1 compile 3.2 findall 3.3 finditer 4.分割split 4.1 替换 4.1.1 sub 4.1.2 subn 4.2 escape 4.3 purge 在Python中提供了操作正则表达式的模块,即re模块. 1.正则表达式的装饰符 修饰符 描述 完整名称 re.I 使匹配对大小写不敏感 re.IGN

  • python beautifulsoup4 模块详情

    目录 一.BeautifulSoup4 基础知识补充 二.爬虫案例 一.BeautifulSoup4 基础知识补充 BeautifulSoup4 是一款 python 解析库,主要用于解析 HTML 和 XML,在爬虫知识体系中解析 HTML 会比较多一些, 该库安装命令如下: pip install beautifulsoup4 BeautifulSoup 在解析数据时,需依赖第三方解析器,常用解析器与优势如下所示: python 标准库 html.parser:python 内置标准库,容错

  • Python随机数模块详情

    目录 1.生成随机数 1.1 random.random() 方法 1.2 random.randint方法 1.3 random.uniform方法 1.4 random.randrange方法 2.用于序列的函数 2.1 random.choice(seq) 2.2 random.shuffle()方法 2.3 random.sample()方法 前言: 随机数模块实现了各种分布的伪随机数生成器.对于整数,从范围中有统一的选择. 对于序列,存在随机元素的统一选择.用于生成列表的随机排列的函数

  • Python calendar模块详情

    目录 1. calendar 模块概述 1.1calendar 特点 1.2calendar 类结构 1.3calendar 使用步骤 2. calendar 相关方法 2.2calendar 模块相关方法 2.3calendar 模块属性 2.4calendar 模块提供5个类 2.5calendar.Calendar类实例相关方法 2.6calendar.TextCalendar类实例相关方法 2.7calendar.HTMLCalendar类实例相关方法 2.8calendar.HTMLC

  • Python hashlib模块详情

    目录 1. hashlib 模块概述 1.1hashlib 模块特点 1.2hashlib 模块使用步骤 2. hashlib 工作原理 2.1hash 算法特点 2.2hash 构造方法 2.3hash 算法过程 2.4hash 常用算法 3. hashlib 属性方法 4. 实操 5.总结 前言: 在互联网的时代,我们在网络中传输过程中都是要经过加密的,常见网络数据传输的加密方式有MD5和RSA算法.当然,加密算法还有很多中按加密.解密方式不同分为:对称加密.非对称加密.hash加密.其中M

  • Python 中 Shutil 模块详情

    一.什么是shutil shutil可以简单地理解为sh + util ,shell工具的意思.shutil模块是对os模块的补充,主要针对文件的拷贝.删除.移动.压缩和解压操作. 二.shutil模块的主要方法 1. shutil.copyfileobj(fsrc, fdst[, length=16*1024]) copy文件内容到另一个文件,可以copy指定大小的内容.这个方法是shutil模块中其它拷贝方法的基础,其它方法在本质上都是调用这个方法. 让我们看一下它的源码: def copy

  • Python JSON模块的使用详情

    目录 1.dumps( )将Python数据转成JSON格式 1.1设置缩进indent 1.2排序sort_keys 2.loads( )将JSON格式数据转成Python数据 1.dumps( )将Python数据转成JSON格式 转换对应表: Python JSON dict object list,tuple array str,unicode string int,float,long number True true False false None null import json

  • Python中的datetime包与time包包和模块详情

    目录 一.datetime包 1.timedelta(params…)得到一个时间增量对象 2.timezone(timedelta)+timedelta(params…)创建时区对象 3.datetime模块 datetime.strftime(fmt)datetime时间对象转字符串 datetime.strptime(date_string,fmt)字符串转成datetime时间对象 datetime.timestamp(datetime_obj)将datetime时间对象转换成秒级时间戳

  • Python os和os.path模块详情

    1.目的:在Python中实现只读取扩展名为xlsx的文件 解决方法: 使用os模块. 解决思路: 1.确定目录 2.循环遍历每一个文件 3.筛选符合条件的文件,读取数据 具体代码如下: import os # 1.首先定义路径 filepath = 'E:/old/工作/数据库表' # 2.循环遍历路径下的每一个文件 for filename in os.listdir(filepath):     # 3.列出文件中以.xlsx结尾的文件     if filename.endswith((

  • Python正则表达re模块之findall()函数详解

    一.re.findall函数介绍 它在re.py中有定义: def findall(pattern, string, flags=0): """Return a list of all non-overlapping matches in the string. If one or more capturing groups are present in the pattern, return a list of groups; this will be a list of

随机推荐