返回顶部
首页 > 资讯 > 后端开发 > Python >Python 正则模块详情
  • 226
分享到

Python 正则模块详情

2024-04-02 19:04:59 226人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录1、正则表达式的装饰符2、查找单个匹配项2.2 group2.3 search2.4 fullmatch2.5 匹配对象3、查找多个匹配项3.1 compile3.2 finda

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 正则模块内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python 正则模块详情

本文链接: https://lsjlt.com/news/156157.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python 正则模块详情
    目录1、正则表达式的装饰符2、查找单个匹配项2.2 group2.3 search2.4 fullmatch2.5 匹配对象3、查找多个匹配项3.1 compile3.2 finda...
    99+
    2024-04-02
  • python beautifulsoup4 模块详情
    目录一、BeautifulSoup4 基础知识补充二、爬虫案例一、BeautifulSoup4 基础知识补充 BeautifulSoup4 是一款 python 解析库,主...
    99+
    2024-04-02
  • Python hashlib模块详情
    目录1. hashlib 模块概述1.1hashlib 模块特点1.2hashlib 模块使用步骤2. hashlib 工作原理2.1hash 算法特点2.2hash 构造方法2.3...
    99+
    2024-04-02
  • Python calendar模块详情
    目录1. calendar 模块概述1.1calendar 特点1.2calendar 类结构1.3calendar 使用步骤2. calendar 相关方法2.2calendar ...
    99+
    2024-04-02
  • python模块之re正则表达式详解
    一、简单介绍 正则表达式是一种小型的、高度专业化的编程语言,并不是python中特有的,是许多编程语言中基础而又重要的一部分。在python中,主要通过re模块来实现。 正则表达式模式被编译成一系列的字节码...
    99+
    2022-06-04
    详解 模块 正则表达式
  • Python 中 Shutil 模块详情
    一、什么是shutil shutil可以简单地理解为sh + util ,shell工具的意思。shutil模块是对os模块的补充,主要针对文件的拷贝、删除、移动、压缩和解压操作。 ...
    99+
    2024-04-02
  • 详细解析python正则表达式re模块
    本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于正则表达式中re模块的相关问题,下面一起来看一下,希望对大家有帮助。在Python中需要通过正则表达式对字符串进⾏匹配的时候,可以使⽤⼀个python自带的模块,名字为re。...
    99+
    2022-06-14
    python
  • python的正则表达式和re模块详解
    目录一、正则表达式基础二、python re模块三、进阶总结一、正则表达式基础 二、python re模块 注意:正则表达式 != re eg: 注意:如果返回的是对象,则需要...
    99+
    2024-04-02
  • python re模块 正则表达式
    导航: 1、正则表达式元字符2、预定义字符集3、re模块常用函数4、注意事项 正则表达式在很多语言里都支持,python也不例外,re模块就是正则表达式的应用 正则表达式对字符串的逻辑操作,主要是对字符串的一种过滤,用“元字符” 与“普通...
    99+
    2023-01-30
    模块 正则表达式 python
  • python正则表达式模块re
    正则表达式的特殊元素 匹配符号 描述 '.'(点dot) 在默认模式下,它匹配除换行符之外的任何字符。如果指定了DOTALL标志,则匹配包括换行符在内的任何字符 '^'(Caret) 匹配以字符串开头,...
    99+
    2023-01-30
    模块 正则表达式 python
  • python_正则_re模块
      正则表达式元字符: 字符匹配 : . :除换行符以外的任意单个字符 [] :指定范围内字符 [^] :指定范围外字符 次数匹配: * :任意次,0,1,多次 .* :任意字符 ...
    99+
    2023-01-30
    正则 模块 _re
  • 关于Python正则表达式模块之re模块
    目录前言:导入模块1.re.match() 函数(1)匹配单个字符(2)匹配多个字符 字符功能/说明位置*(3) 匹配开头和结尾2.re.search() 函数3.re.findal...
    99+
    2023-05-16
    Python正则表达式 Pythonre模块
  • python正则表达式(re模块)的使用详解
    目录前言re.match函数匹配单个字符匹配多个字符匹配开头结尾匹配分组re.compile 函数re.search函数re.findall函数re.finditer函数re.sub...
    99+
    2024-04-02
  • Python正则表达re模块之findall()函数详解
    一、re.findall函数介绍 它在re.py中有定义: def findall(pattern, string, flags=0): """Return a list o...
    99+
    2024-04-02
  • Python os和os.path模块详情
    1、目的:在Python中实现只读取扩展名为xlsx的文件 解决方法: 使用os模块。 解决思路: 1、确定目录2、循环遍历每一个文件3、筛选符合条件的文件,读取数据 具体代码如下...
    99+
    2024-04-02
  • Python随机数模块详情
    目录1、生成随机数1.1random.random()方法1.2random.randint方法1.3random.uniform方法1.4random.randrange方法2、用...
    99+
    2024-04-02
  • python--模块之re正则表达式
    简介: 正则表达式本身是一个小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,我们可以通过直接调用来实现正则匹配。 正则表达式基础知识: --普通字符匹配自身 abc ----abc --元字符 . :匹...
    99+
    2023-01-30
    模块 正则表达式 python
  • python模块之re(正则表达式)
    匹配模式 re.ASCII同re.A,对应的内联标识为(a),用于向后兼容。使元字符\w, \W, \b, \B, \d, \D, \s和\S仅匹配ASCII字符。该模式只在string模式下有意义,在byte模式下将被忽略。 re.DE...
    99+
    2023-01-31
    模块 正则表达式 python
  • Python正则表达式re模块详解(建议收藏!)
    目录前言match匹配字符串单字符匹配. 匹配任意一个字符\d 匹配数字\D 匹配非数字\S 匹配非空白\w 匹配单词、字符,如大小写字母,数字,_ 下划线\W 匹配非单词字符[ ]...
    99+
    2024-04-02
  • Python 中 logging 模块使用详情
    目录1.为什么要用logging模块2.logging模块介绍3.基础设置1.为什么要用logging模块 在实际应用中,日志文件十分重要,通过日志文件,我们知道程序运行的细节;同时...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作