在一般的后端语言中都有正则表达式的使用,个人觉得正则表达式的难点就是有比较多的元字符比较难记,所以建议大家收藏。而在 python 的编程中,特别是爬虫之后的数据筛选、清洗等操作都需要对字符串进行大量的操作,使用正则表达式无疑是最简便的一种字符串处理操作。
1、正则表达式的元字符及组装形式
首先,正则表达式就是由一个一个的元字符组合起来的一个字符串,然后以这个字符串作为格式去匹配任意的字符串最后生成新的数据文本。那么,先来看一下在 python 中像这样的元字符到底有哪些。
1. 匹配任意字符(不包括换行符)
2^ 匹配开始位置,多行模式下匹配每一行的开始
3$ 匹配结束位置,多行模式下匹配每一行的结束
4* 匹配前一个元字符0到多次
5+ 匹配前一个元字符1到多次
6? 匹配前一个元字符0到1次
7{m,n} 匹配前一个元字符m到n次
8\\ 转义字符,跟在其后的字符将失去作为特殊元字符的含义,例如\\.只能匹配.,不能再匹配任意字符
9[] 字符集,一个字符的集合,可匹配其中任意一个字符
10| 逻辑表达式 或 ,比如 a|b 代表可匹配 a 或者 b
11(...) 分组,默认为捕获,即被分组的内容可以被单独取出,默认每个分组有个索引,从 1 开始,按照"("的顺序决定索引值
12(?iLmsux) 分组中可以设置模式,iLmsux之中的每个字符代表一个模式,用法参见 模式 I
13(?:...) 分组的不捕获模式,计算索引时会跳过这个分组
14(?P<name>...) 分组的命名模式,取此分组中的内容时可以使用索引也可以使用name
15(?P=name) 分组的引用模式,可在同一个正则表达式用引用前面命名过的正则
16(?#...) 注释,不影响正则表达式其它部分,用法参见 模式 I
17(?=...) 顺序肯定环视,表示所在位置右侧能够匹配括号内正则
18(?!...) 顺序否定环视,表示所在位置右侧不能匹配括号内正则
19(?<=...) 逆序肯定环视,表示所在位置左侧能够匹配括号内正则
20(?<!...) 逆序否定环视,表示所在位置左侧不能匹配括号内正则
21(?(id/name)yes|no) 若前面指定id或name的分区匹配成功则执行yes处的正则,否则执行no处的正则
22\number 匹配和前面索引为number的分组捕获到的内容一样的字符串
23\A 匹配字符串开始位置,忽略多行模式
24\Z 匹配字符串结束位置,忽略多行模式
25\b 匹配位于单词开始或结束位置的空字符串
26\B 匹配不位于单词开始或结束位置的空字符串
27\d 匹配一个数字, 相当于 [0-9]
28\D 匹配非数字,相当于 [^0-9]
29\s 匹配任意空白字符, 相当于 [ \t\n\r\f\v]
30\S 匹配非空白字符,相当于 [^ \t\n\r\f\v]
31\w 匹配数字、字母、下划线中任意一个字符, 相当于 [a-zA-Z0-9_]
32\W 匹配非数字、字母、下划线中的任意字符,相当于 [^a-zA-Z0-9_]
来源说明:以上元字符表说明引用自“博客园,菜鸟的日常”
2、python 的内置模块 re 操作正则表达式的模式
python 的 re 模块提供了很多内置的函数来操作正则表达式,掌握正则表达式以及这些函数的使用会更大的提高工作效率,因为大多时候都是在和字符串打交道。并且 re 模块在使用这些函数来操作正则表达式的时候都可以指定不同类型的模式。比如:re 内置模块的 compile(pattern, flags=0) 函数中的 flags 参数就是用于指定匹配模式的,默认情况下各个内置函数的模式都等于零就是不指定模式。
1re.I 使匹配对大小写不敏感
2re.L 做本地化识别(locale-aware)匹配
3re.M 多行匹配,影响 ^ 和 $
4re.S 使 . 匹配包括换行在内的所有字符
5re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
6re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
3、re 模块函数匹配正则表达式操作字符串
compile(pattern, flags=0) 对匹配的正则表达式进行预编译,这种模式有利于后续对同一种匹配规则的复用,当然也可以不进行预编译使用 re 模块的内置函数直接进行正则表达式的使用。
findall(pattern, string, flags=0) 找到所有的匹配以后的数据,并且使用列表的形式返回匹配后的数据。
1# 导入 re 内置模块
2import re
3# 定义多行字符串 sc
4sc = '''str1
5str2
6str3'''
7
8# 使用 compile() 函数进行正则表达式对预编译
9# 其中正则表达式为<.+>参照元字符表,表达式中<.>表示匹配任意字符(不包括换行符)
10# <+> 表示匹配前一个元字符1到多次,组合<.+>就表示匹配所有字符不包括换行符
11pattern = re.compile(".+")
12# 正则表达对象调用 findall() 函数返回列表
13print pattern.findall(sc)
14# 打印返回列表,结果应该是下面列表
15['str1', 'str2', 'str3']
split(pattern, string, maxsplit=0, flags=0) 按照正则表达式匹配的数据为切割点,对原来的数据进行切分并返回一个数据列表。
1# 定义原始字符串
2sc = '''strw 1 laow
3 strd 2 laow
4 strc 3 laow'''
5# 按照数字切分
6print re.split('\d+', sc)
7# 打印结果
8['strw ', ' laow\n strd ', ' laow\n strc ', ' laow']
sub(pattern, repl, string, count=0, flags=0) 匹配正则表达式的字符串并且替换成指定的字符串后返回。
1# 导入内置模块 re
2import re
3# 定义原始字符串
4sc = "the sum of 6 and 9 is [6+9]."
5# 将[6+9]替换为15
6print re.sub('\[6\+9\]', '15', sc)
7# 打印结果
8the sum of 7 and 9 is 15.
search(pattern, string, flags=0) 查找正则表达式内容。
1# 导入内置模块 re
2import re
3# 定义原始数据
4sc = '''strw 1 laow
5 strd 2 laow
6 strc 3 laow'''
7# 找到第一个以 t 开头的字符串
8sc_res = re.search('t\w+', sc)
9# 必须使用返回对象的 group() 函数才能打印出值,因为 search() 函数返回的是对象
10print sc_res.group()
escape(pattern) 字符串的转义函数,当需要处理的字符串中包含正则表达式中的元字符时必须对原正则表达式进行转义,否则会导致匹配不正确。
1# 导入内置模块 re
2import re
3# 定义原始字符串
4sc = ".+\d222"
5# 将正则表达式<.+\d222>进行转义
6pattern_str = re.escape(".+\d222")
7# 打印转移后的正则表达式
8print pattern_str
9# 打印结果
10\.\+\\d222
11# 打印匹配后的字符串
12print re.findall(pattern_str, sc)
13# 打印结果
14['.+\\d222']
4、总结
除了上述第三点中列举的常见内置函数的使用,还有关于 python 内置的正则表达式的用法还有分组、环视等使用方法。能够帮助我们处理字符串的大多数问题,正则表达式在 python 中的使用非常强大、也是后端语言中使用比较高的,建议大家收藏。
更多精彩前往微信公众号【Python 集中营】,专注后端编程实战,原创文章每天更新!
相关推荐
《大话数据分析:Tableau数据可视化实战》的数据集是一份重要的资源,对于想要学习和提升Tableau数据可视化技能的人来说极具价值。Tableau是一款强大的商业智能工具,它允许用户通过直观的拖放界面来探索和可视化...
大话Java:从零基础到数据库、Web开发以漫画的形式,由浅入深、循序渐进地介绍Java编程的常用技术和方法,内容涵盖了Java基本语法结构、面向对象特征、集合框架体系、异常处理、GUI编程、MySQL数据库、JDBC数据库...
2. **多行字符串**:Python中,用三个单引号或双引号括起的字符串可以跨越多行,这在打印长文本或代码块时非常有用。在打印皮卡丘的练习中,多行字符串用于存储整个字符画,然后一次性打印出来。 3. **转义字符**:...
大话存储:存储系统底层架构原理极限剖析(终极版)第3部分 大话存储:存储系统底层架构原理极限剖析(终极版)第3部分大话存储:存储系统底层架构原理极限剖析(终极版)第3部分
大话Python|基础语法(上)
大话存储:存储系统底层架构原理极限剖析(终极版)_张冬2015.01_P989
《大话设计模式》C++实现-design-patterns-cpp
- **大言不惭**:形容说大话。 - **明目张胆**:形容公然妄为。 - **明哲保身**:形容逃避责任。 - **忘乎所以**:形容过于兴奋。 - **高谈阔论**:形容不切实际的谈论。 - **始作俑者**:比喻开创恶劣风气。 ...
本文用比喻的方法大话python语言 通俗易懂 很容易上手,把深奥的文字变成形象化 的语言Python语言是什么? 想象你有一个非常聪明的机器人朋友,名字叫Python。Python能听懂你用简单的英语(编程语言)告诉它的指令,...
Java代码积累:并发 设计模式 数据结构 使用容器 实用 类 基础知识 并发性 演示线程的生命周期 生产者-消费者 设计模式参考《大话设计模式》 工厂简单模式 创造型模式 工厂方法模式 抽象工厂模式 原型模式 建造者...
《大话存储:存储系统底层架构原理极限剖析(终极版)》是一本深入探讨存储技术的专业书籍,由一位对技术充满热情的作者精心撰写。这本书以其严谨性和创新性,为读者揭示了存储系统的奥秘,提供了全面而深入的洞察。...
处理器是现代信息技术的核心,它如同人类的大脑,负责执行指令和处理数据。在信息产业的滚滚洪流中,处理器的重要性不言而喻,倘若没有处理器,信息产业就如同建立在沙堆上的城堡,脆弱而不堪一击。在《大话处理器》...
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向...
但根据标题与描述信息,可以详细解读书籍《大话存储:网络存储系统原理精解与最佳实践》的知识点。 《大话存储:网络存储系统原理精解与最佳实践》是张冬所著的一本专业书籍,主要探讨网络存储系统的基本原理与实际...
《梦幻大话wdf提取工具》是一款专为游戏《梦幻西游》设计的资源动画提取软件,它使得玩家和开发者能够方便地从游戏的wdf文件中获取到所需的图像、音频和其他素材,以便进行二次创作或者游戏研究。下面将详细阐述这款...
用于学习CS基础课程,知识点来源完成后会一一列举,目前的目标是: 数据结构和算法--《大话数据结构》、《王道考研》、《算法》、各大博客论坛(到时候会备注地址) 计算机网络 --《计算机网络-自顶向下方法》、...
"大话2WDF素材提取"指的是针对特定游戏《大话》中的2WDF格式文件进行内容解析和提取的过程。2WDF文件是一种封装了游戏内各种资源如图像、音频、动画等的数据格式,用于高效存储和管理游戏素材。 1. **2WDF文件格式*...
共5个压缩包