本文链接: https://blog.csdn.net/xietansheng/article/details/115557843

Python3 学习笔记(目录)

Python官网 正则表达式:re — Regular expression operations

1. 正则表达式模块: re

正则表达式简单使用示例:

import repattern = re.compile("[0-9]+")          # 编译正则表达式, 返回 re.Patternprint(pattern.match("12cd"))            # 匹配字符串(匹配开头), 匹配, 返回 re.Match
print(pattern.match("ab34"))            # 匹配字符串(匹配开头), 不匹配, 返回 None
print(pattern.fullmatch("1234"))        # 匹配整个字符串
print(pattern.findall("ab12cd34"))      # 搜索整个字符串, 返回所有匹配的子串列表: ["12", "34"]match = pattern.search("ab12cd")        # 从整个字符串中搜索("[0-9]+")第一个匹配的结果,
if match:                               # 搜索到匹配结果, 返回 re.Match, 否则为 None,print(match.group())                # 获取搜索到的结果, 结果为 "12"print(re.match("[0-9]+", "12cd"))       # 也可以调用 re 模块的直接方法进行匹配,
print(re.fullmatch("[0-9]+", "1234"))   # 内部也是先编译再匹配, 内部编译好的正则表达式对象会缓存,
print(re.findall("[0-9]+", "ab12cd34")) # 下次再使用该正则表达式(pattern与flags相同)时,
print(re.search("[0-9]+", "ab12cd"))    # 直接从缓存中获取正则表达式对象, re.purge() 清除缓存。

re模块中的函数与常量(Python官网 re模块内容):

# 将正则表达式编译为正则表达式对象 re.Pattern
#
# 参数:
#     pattern: 正则表达式(字符串类型, 原始样式字符串)
#     flags: 标志常量(例如只匹配ASCII码, 忽略大小写等), re.RegexFlag 类中的常量
# 返回:
#     正则表达式对象 re.Pattern
#
# 得到编译好的正则表达式对象后, 可以用它的 match(), search() 等方法匹配字符串。
re.compile(pattern, flags=0)# 搜索整个字符串, 找到匹配样式的第一个位置
#
# 参数:
#     pattern: 正则表达式(字符串类型)
#     string: 搜索的字符串
#     flags: 标志常量
# 返回:
#     搜索成功, 则返回 re.Match 对象, 否则返回 None。
#     搜索成功后调用 match.group() 方法可以获取搜索到的内容。
re.search(pattern, string, flags=0)# 匹配字符串的开头, 函数内部将会把 pattern字符串 编译为 re.Pattern对象, 再进行匹配。
#
# 参数:
#     pattern: 正则表达式(字符串类型)
#     string: 需要匹配的字符串
#     flags: 标志常量
# 返回:
#     匹配成功, 则返回 re.Match 对象, 否则返回 None。
#     匹配成功后调用 match.group() 方法可以获取匹配的内容。
re.match(pattern, string, flags=0)# 匹配整个字符串
re.fullmatch(pattern, string, flags=0)# 用 pattern 分开 string, 返回一个由分开后子字符串组成的 列表
re.split(pattern, string, maxsplit=0, flags=0)# 查找整个字符串, 返回一个不重复的与 pattern 匹配的子字符串列表
re.findall(pattern, string, flags=0)# 查找整个字符串, 返回一个迭代器, 迭代元素为 re.Match
re.finditer(pattern, string, flags=0)# string 中匹配 pattern 的子字符串用 repl 替换, count 表示最多替换次数
# count=0表示全部替换, 返回被替换后的字符串。
re.sub(pattern, repl, string, count=0, flags=0)# 与 re.sub(...) 相同, 返回的是一个元祖 (替换后的字符串, 替换次数)
re.subn(pattern, repl, string, count=0, flags=0)# 转义 pattern 中的特殊字符。如果想匹配任何可能包含正则表达式元字符的
# 文本字符串, 可以用该方法先转义正则表达式。
# 例如: re.escape(".+abc") 结果为 "\.\+abc"
# 匹配字符串是否以 ".+abc" 开头: re.match(re.escape(".+abc"), ".+abc123")
re.escape(pattern)# 清除正则表达式缓存
re.purge()

re.match() 与 re.search() 的区别:前者只匹配字符串开头,后者搜索整个字符串。

标记常量 flags 是 re.RegexFlag 类中的示例,该类继承自 enum.IntFlag,并有多个别名引用。flags 的部分常量:

# 让 \w, \W, \b, \B, \d, \D, \s, \S 只匹配ASCII, 而不是 Unicode
re.A,   re.ASCII,       re.RegexFlag.A,     re.RegexFlag.ASCII# 匹配时忽略大小写
re.I,   re.IGNORECASE,  re.RegexFlag.I,     re.RegexFlag.IGNORECASE# 由本地语言区域决定 \w, \W, \b, \B 和 大小写敏感匹配
re.L,   re.LOCALE,      re.RegexFlag.L,     re.RegexFlag.LOCALE# 样式字符 '^' 和 '$' 除了匹配字符串的开始和结束外, 还匹配每一行的开始和结束
re.M,   re.MULTILINE,   re.RegexFlag.M,     re.RegexFlag.MULTILINE# 使特殊字符 '.' 匹配换行符, 没有该标记, '.' 只匹配除了换行符以外的其他任意字符
re.S,   re.DOTALL,      re.RegexFlag.S,     re.RegexFlag.DOTALL# 编译时忽略空白和注释, 设置了该标记后可以在正则表达式的原始样式字符串中添加注释
re.X,   re.VERBOSE,     re.RegexFlag.X,     re.RegexFlag.VERBOSE

标记常量 flags 可以同时设置多个,例如: flags=re.A|re.I

2. 正则表达式对象: re.Pattern

正则表达式对象re.Pattern中的属性和方法(Python官网 Regular Expression Objects):

Pattern.search(string[, pos[, endpos]])         # 参考 re.search()Pattern.match(string[, pos[, endpos]])          # 参考 re.match()
Pattern.fullmatch(string[, pos[, endpos]])      # 参考 re.fullmatch()Pattern.split(string, maxsplit=0)               # 参考 re.split()Pattern.findall(string[, pos[, endpos]])        # 参考 re.findall()
Pattern.finditer(string[, pos[, endpos]])       # 参考 re.finditer()Pattern.sub(repl, string, count=0)              # 参考 re.sub()
Pattern.subn(repl, string, count=0)             # 参考 re.subn()Pattern.pattern                                 # 编译对象的原始样式字符串
Pattern.flags                                   # 正则表达式对象的标志常量
Pattern.groups                                  # 捕获组合的数量
Pattern.groupindex                              # 映射由 (?P<id>) 定义的命名符号组合和数字组合的字典,# 如果没有符号组, 则该字典为空字典 {}。

3. 匹配对象: re.Match

匹配对象re.Match中的部分属性和方法(Python官网 Match Objects):

Match.group([group1, ...])  # 返回一个(str)或多个(tuple)匹配的子组, group 默认为 0 表示匹配的整个子串
Match.groups(default=None)  # 返回一个元祖, 包含了所有匹配的子组Match.start([group])    # 返回 group 匹配到的子字符串的开始位置, group 默认为 0 表示匹配的整个子串
Match.end([group])      # 返回 group 匹配到的子字符串的结束位置, group 默认为 0 表示匹配的整个子串Match.span([group])     # 返回一个元祖 (m.start(group), m.end(group))Match.re                # 产生该匹配对象 的 正则表达式对象
Match.string            # 产生该匹配对象 的 中的原待匹配字符串

代码示例:

>>> import re
>>> m = re.search("(\\w+)_(\\w+)", "xx aa_bb yy")
>>>
>>> m.group()           # 匹配的整个子串
'aa_bb'
>>> m.group(0)          # 匹配的整个子串
'aa_bb'
>>> m.group(1)          # 第1个匹配组(带圆括号的组)匹配的子串
'aa'
>>> m.group(2)          # 第2个匹配组 匹配的子串
'bb'
>>> m.group(1, 2)       # 第1、2个匹配组 匹配的子串组成的元祖
('aa', 'bb')
>>> m.groups()          # 所有匹配组 匹配的子串组成的元祖
('aa', 'bb')
>>>
>>> m.start()           # 匹配的整个子串 在 原字符串中的 开始 位置
3
>>> m.start(0)          # 匹配的整个子串 在原字符串中的 开始 位置
3
>>> m.start(2)          # 第2个匹配组 匹配的子串 在原字符串中的 开始 位置
6
>>> m.end(1)            # 第1个匹配组 匹配的子串 在原字符串中的 结束 位置(下一个位置的索引)
5
>>> m.span()            # 匹配的整个子串 在原字符串中的 开始 和 结束 位置
(3, 8)
>>> m.span(0)           # 匹配的整个子串 在原字符串中的 开始 和 结束 位置
(3, 8)
>>> m.span(1)           # 第1个匹配组 匹配的子串 在原字符串中的 开始 和 结束 位置
(3, 5)
>>>
>>> m.re                        # 产生该匹配对象 的 正则表达式对象
re.compile('(\\w+)_(\\w+)')
>>> m.string                    # 产生该匹配对象 的 中的原待匹配字符串
'xx aa_bb yy'

Python3: 正则表达式 - re 模块相关推荐

  1. python3中argparse模块详解

    文章目录 python3中argparse模块详解 一. 命令行参数分为位置参数和选项参数: 二. 使用步骤: 三. add_argument()方法参数: 1. name or flags: 2. ...

  2. pythonurllib模块-Python3中核心模块urllib的用法大全

    Python的urllib模块提供了一个高级的Web通信库,支持基本的协议,如HTTP.FTP和Gopher,同时也支持对本地文件的访问.在Python3中,urllib.urlparse.urlli ...

  3. python 正则表达式re 模块的使用

    python 正则表达式re 模块的使用 文章目录: 一.re模块介绍 1.re模块说明 2.官方文档给出的文档 3.别人总结的成表格中的内容 二.re模块使用介绍 1.常用函数源码 1.常用的函数介 ...

  4. python爬取音乐神器_Python爬虫提取神器,正则表达式(re模块),全程干货!

    python正则表达式(re模块) 什么是正则表达式 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为"元字符&quo ...

  5. Python3之paramiko模块

    Python3之paramiko模块 转载☞:https://www.cnblogs.com/meng-wei-zhi/p/8258674.html 参考☞:https://www.cnblogs.c ...

  6. python3 正则表达式点星问号(.*?)能不能匹配换行符?不能的话应该怎么写

    python3的re模块使用过程中,正则的书写遇到了一些问题,就是使用.*?能不能匹配到换行符的问题. 答案是不能. 如果在匹配过程中遇到了也没关系,加上这个语句就好: \s+ 转载于:https:/ ...

  7. 【Python3】Python模块与包的导入

    [Python3]Python模块与包的导入 一.模块导入 1. 定义 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语 ...

  8. Python3之configparser模块

    1. 简介 configparser用于配置文件解析,可以解析特定格式的配置文件,多数此类配置文件名格式为XXX.ini,例如mysql的配置文件.在python3.X中模块名为configparse ...

  9. python findall函数_Ramp;Python Data Science系列:数据处理(11)Python正则表达式re模块(三)...

    前言 使用正则表达式进行匹配,可以直接调用模块级函数,如match().search().findall()等,函数第一个参数是匹配的正则表达式,第二个参数则为要匹配的字符串.也可以使用re.comp ...

最新文章

  1. 表格td超出部分隐藏,显示...
  2. 低头族的第三只眼,“赛博朋克”新装备让你走路不再撞树
  3. linux 编译文件mm,Linux编译C++文件,说没有找到头文件,怎么啊?新手,不太会用...
  4. 可视化篇(四)——— python绘制双y轴、箱线图、概率分布三种图形及案例
  5. php全部公开课,PHP公开课|这篇PHP的each()函数教学数,只为了帮你的PHP会学的更好...
  6. 微软项目技术结构思路 ExtJs/JQuery + Asp.net MVC + Wcf service + Entity Framework
  7. 1114 Family Property (25 分)
  8. 2017百度之星程序设计大赛 - 资格赛 1003
  9. 锁存器(74HCT573)使用
  10. 我买了个5g手机,但是手机卡是4g的,能使用吗?
  11. 量子笔记:布尔逻辑/代数、逻辑门、通用门、可逆计算
  12. 服务器内存怎么看型号,怎么查看服务器内存的型号
  13. 诗歌十一 十二则名门家训(非淡泊无以明志,非宁静无以致远)
  14. 朋友圈一杠中间一个点_朋友圈只显示一条线 中间一个点 是被删除了么
  15. Python中uniform的用法
  16. vim编辑修改二进制文件以及对于二进制文件中幻数测试
  17. 经验分享 | VulnHub靶场学习:HA-Avengers-Arsenal
  18. BZOJ4810 [Ynoi2017]由乃的玉米田
  19. c语言中国象棋ai算法,【中国象棋】AI算法中的棋子价值是怎么衡定的?
  20. JS Object 对象中删除属性

热门文章

  1. 初探强化学习(6)到底TMD什么是model-based和model-free(基于模型的强化学习和基于模型的强化学习 TMD的到底是什么)
  2. 简述关系数据库的数据完整性规则_什么是数据库关系的完整性?
  3. Idea 各种图标的含义
  4. java ldap 工具_通过定义LdapUtil工具类实现JAVA关于LDAP协议目录数据保存和删除等操作代码示例...
  5. html中合并两块中间如何加一条竖线,HTML如何在两个div标签中间画一条竖线
  6. django 登录注册注销
  7. 直播软件app开发中直播公屏如何做出来?
  8. pip install cx_oracle,使用pip安装 cx_Oracle 模块
  9. 【ROS-cartographer学习小记-01】使用自己的激光雷达思岚A1运行cartographer,附代码以及bag包-直接运行即可看到结果
  10. 基于Java的五子棋游戏的设计与实现