`
linvar
  • 浏览: 258981 次
  • 性别: Icon_minigender_1
  • 来自: 未定
社区版块
存档分类
最新评论

python2.x学习笔记(11) -- 正则表达式

阅读更多
1. 正则表达式(RE)为高级文本模式匹配,以及搜索-替代等功能提供了基础。正则表达式(RE)是一些由字符和特殊符号组成的字符串,它们描述了这些字符和字符的某种重复方式,因此能按某种模式匹配一个有相似特征的字符串的集合,因此能按某模式匹配一系列有相似特征的字符串,换句话说,它们能匹配多个字符串 - 一个只能匹配一个字符串的 RE 模式是乏味且毫无作用的,你说是不是?

2. 在 Python专门术语中,有两种主要方法完成模式匹配:搜索(searching)和匹配(matching)。搜索,即在字符串任意部分中查找匹配的模式,而匹配是指,判断一个字符串能否从起始处全部或部分的匹配某个模式。搜索通过 search()函数或方法来实现,而匹配是以调用 match()函数或方法实现的。

3. 常用正则表达式符号和特殊字符
记号       说明         举例
literal 匹配字符串的值         foo
re1|re2 匹配正则表达式re1或re2           foo|bar
. 匹配任何字符(换行除外)         b.b
^ 匹配字符串的开始         ^dear
$ 匹配字符串的结尾         /bin/*sh$
* 匹配前面出现的正则表达式0次或多次   [A-Za-z0-9]*
+ 匹配前面出现的正则表达式1次或多次 [a-z]+\.com
? 匹配前面出现的正则表达式0次或一次 goo?
{N} 匹配前面出现的正则表达式N次 [0-9]{3}
{M,N} 匹配重复出现M次到N次的正则表达式 [0-9]{5,9}
[...] 匹配字符组里出现的任意一个字符 [aeiou]
[..x-y..] 匹配从字符x到y中的任意一个字符 [a-h],[0-9]
[^...] 不匹配此字符集中出现的任何一个字符 [^aeiou],[^A-Za-z0-9_]
(*|+|?|{})? 用于上面出现的任何“非贪婪”版本重复匹配次数符号(*,+,?,{})   .*?[a-z]

特殊字符
\d 匹配任何数字,和[0-9]一样(\D是\d的反义) data\d+.txt
\w 匹配任何数字字母字符,等同于[A-Za-z0-9_](\W是\w的反义)  [A-Za-z_]\w+
\s 匹配任何空白符,等同于[ \n\t\r\v\f] (\S是\s的反义)   of\sthe
\b 匹配单词边界(\B 是 \b 的反义) \bThe\b
\nn 匹配已保存的子组 price: \16
\c 逐一匹配特殊字符c \., \\, \*
\A (\Z) 匹配字符串的起始(结束) \ADear

4. 特殊字符 \b and \B 用来匹配单词边界。两者之间的区别是,\b 匹配的模式是一个单词边界,就是说,与之对应的模式一定在一个单词的开头,不论这个单词的前面是有字符(该词在一个字符串的中间), 还是没有字符(该单词在一行的起始处)。同样地, 只匹配出现在一个单词中间的模式(即,\B不在单词边界上的字符)。看下面几个例子:
  RE Pattern     Strings Matched                
  the            任何包含有"the"的字符串
  \bthe          任何以"the"开始的字符串
  \bthe\b        仅匹配单词 “the”
  \Bthe          任意包含“the”但不以“the”开头的单词

5. 使用闭包操作符 ( *, +, ?, {} ) 实现多次出现/重复匹配
  在上表中,我们注意到问号出现了不只一次(被重载),问号有两种含义:1.单独使用时表示匹配出现零次或一次的情况,2.紧跟在表示重复的元字符后面时,表示要求搜索引擎匹配的字符串越短越好。例如:(+?)
  前面提到"越短越好..."是什么意思呢?当使用了表示重复的元字符(*+?{m,n})时,正则表达式引擎在匹配模式时会尽量"吸收"更多的字符。这就叫做"贪心"。问号告诉正则表达式引擎尽可能地偷懒,要求当前匹配消耗的字符越少越好,留下尽可能多的字符给后面的模式(如果存在)。

6. 用圆括号(()) 组建组
我们不仅想知道是否整个字符串匹配我们的条件(正则表达式),还想在匹配成功时取出某个特定的字符串或子字符串。要达到这个目的,只需要给正则表达式的两边加上一对圆括号。
  使用圆括号的一个额外好处就是匹配的子串会被保存到一个子组,便于今后使用。这些子组可以在同一次匹配或搜索中被重复调用,或被提取出来做进一步处理。

7. 常见的正则表达式函数与方法
函数/方法                           描述
re 模块的函数
compile(pattern,flags=0)      
对正则表达式模式 pattern 进行编译,flags 是可选标志符,并返回一个 regex 对象

re 模块的函数和 regex 对象的方法
match(pattern,string, flags=0)  
尝试用正则表达式模式 pattern 匹配字符串 string,
flags 是可选标志符,如果匹配成功,则返回一个匹配对
象;否则返回 None
search(pattern,string, flags=0)     
在字符串 string 中查找正则表达式模式 pattern 的第一次出现,flags 是可选标志符,如果匹配成功,则返回一个匹配对象;否则返回 None
findall(pattern,string[,flags])     
在字符串 string 中查找正则表达式模式 pattern 的所有(非重复)出现;
返回一个匹配对象的列表
finditer(pattern,string[, flags])
和 findall()相同,但返回的不是列表而是迭代器;对于每个匹配,该迭代器返回一个匹配对象

8. 常见的正则表达式函数与方法(继续)
函数/方法                                描述
匹配对象的方法
split(pattern,string, max=0)    
根据正则表达式 pattern 中的分隔符把字符 string 分割为一个列表,返回成功匹配的列表,最多分割 max 次(默认是分割所有匹配的地方)。
sub(pattern, repl, string, max=0)
把字符串 string 中所有匹配正则表达式 pattern 的地方替换成字符串 repl,
如果 max 的值没有给出,则对所有匹配的地方进行替换(另外,请参考 subn(),它还会返回一个表示替换次数的数值)。
group(num=0)          返回全部匹配对象(或指定编号是 num 的子组)
groups()    返回一个包含全部匹配的子组的元组(如果没有成功匹配,就返回一个空元组)

9. 使用 compile()编译正则表达式
在处理正则表达式时, regex 对象外,还有另一种对象类型 - 匹配对象。这些对象是在 match()或 search()被成功调用之后所返回的结果。匹配对象有两个主要方法:group() 和 groups().

10. Python 原始字符串(raw strings)的用法
原始字符串的产生正是由于有正则表达式的存在。原因是 ASCII 字符和正则表达式特殊字符间所产生的冲突。比如,特殊符号“\b”在ASCII 字符中代表退格键,但同时“\b”也是一个正则表达式的特殊符号, 代表“匹配一个单词边界”.                     
为了让 RE 编译器把两个字符“\b”当成你想要表达的字符串,而不是一个退格键,你需要用另一个反斜线对它进行转义,即可以这样写:“\\b”.
分享到:
评论

相关推荐

    Python学习笔记--皮大庆.pdf.zip

    【Python学习笔记--皮大庆.pdf.zip】是一个针对初学者的Python编程教程,源自英文书籍《How to think like a computer scientist》。这本书以易懂的方式介绍了Python语言的基础知识,旨在帮助没有编程背景的人快速...

    [小小明]Python正则表达式全套笔记v0.3(1.8万字干货)

    Python正则表达式全套笔记v0.3 本文档是小小明个人笔记,涵盖了正则表达式的各个方面,包括各种模式、分组、断言、匹配、查找、替换和切割等。文档中提供了详细的正则匹配规则表,涵盖了基本字符规则、预定义字符集...

    学习笔记:Python爬虫正则表达式.doc

    学习笔记:Python爬虫正则表达式.doc

    python正则表达式详解笔记,python正则表达式教学.doc

    ### Python正则表达式详解 #### 一、正则表达式概述 正则表达式(Regular Expression)是一种在计算机科学领域广泛使用的模式匹配工具。它主要用于处理文本数据,包括搜索、替换以及提取文本中的特定模式。许多...

    python正则表达式学习.zip

    这个压缩包“python正则表达式学习.zip”包含了对Python正则表达式的学习笔记,下面我们将深入探讨这一主题。 首先,我们需要了解什么是正则表达式。正则表达式(Regular Expression,简称regex)是一种特殊的字符...

    (正则表达式)学习笔记

    在这个“正则表达式”学习笔记中,我们将深入探讨这一强大的工具。 1. **基础概念** - **字符集**:包括普通字符(如 `a`、`b`)和特殊字符(如 `.`、`\d`),它们组合起来形成匹配模式。 - **量词**:如 `*` ...

    正则表达式例子及笔记

    整理正则表达式的学习笔记有助于加深理解,提高记忆效果。可以将各种常见模式、特殊字符、语法结构和实例应用进行归纳,方便日后查阅和实践。通过分析和总结,可以逐步掌握正则表达式的精髓,提升在实际工作中解决...

    05-python-sys模块简介-与操作系统进行交互-CSV文件和CSV模块-正则表达式

    这些笔记中,05.04-python-正则表达式和 re 模块.ipynb可能包含了关于如何使用正则表达式和re模块的实际示例和练习;05.02-python-与操作系统进行交互.ipynb可能讲解了如何利用sys模块与操作系统进行互动;05.03-...

    Python字符串与正则表达式学习笔记

    在Python编程语言中,字符串和正则表达式是两个非常重要的概念,广泛应用于数据处理、文本分析和信息提取。下面是对这两个主题的详细说明。 ### 1. 数值与布尔型 在Python中,数值类型主要包括整型(int)和浮点型...

    Python正则表达式的学习记录.zip

    这个压缩包文件“Python正则表达式的学习记录.zip”可能包含了作者在学习过程中编写的代码示例、笔记或者教程,虽然具体的文件内容无法直接查看,但我们可以根据常规的正则表达式学习路径来讨论相关知识点。...

    Python正则表达式re模块简明笔记.docx

    ### Python正则表达式re模块知识点详解 #### 一、正则表达式概念与应用场景 正则表达式(Regular Expression)是一种强大的文本处理工具,在文本搜索、文本替换、数据提取等多个场景有着广泛的应用。它能够帮助...

    Apress.Beginning.Python.From.Novice.to.Professional.Sep.2005.pdf + 皮大庆 学习笔记

    同时,书中也会涉及异常处理、文件和目录操作、正则表达式等进阶话题,这些都是Python程序员必备的技能。 皮大庆的学习笔记可能补充了书中的实例,通过实践加深了对理论知识的理解。例如,他可能分享了如何使用...

    全国计算机等级考试二级python的学习笔记

    全国计算机等级考试二级Python学习笔记可以从以下几个方面进行总结: 1. Python基础知识 - Python语法基础:变量、数据类型、运算符、流程控制语句等。 - Python常用内置数据结构:列表、元组、字典、集合的定义、...

    python学习笔记与简明教程

    ### Python学习笔记与简明教程知识点汇总 #### Python 第1课:安装 - **知识点**: - Python 安装包的选择与下载。 - 安装过程中注意事项,如添加环境变量等。 - 验证Python是否安装成功的方法。 #### Python ...

    《Python Standard Library》学习笔记(原书为 Python2.X 版,在学习的过程中,用 Py.zip

    以下是基于《Python Standard Library》学习笔记的一些关键知识点的详细解析: 1. **内置模块**:Python内建了多个模块,如`sys`用于获取系统相关信息,`os`提供了与操作系统交互的接口,`io`处理输入输出流,以及`...

    精通正则表达式(英文版+中文目录)

    《精通正则表达式》是一本深入探讨正则表达式的权威书籍,英文版结合中文目录,为学习者提供了便利。正则表达式是计算机科学中用于模式匹配和文本操作的强大工具,广泛应用于文本处理、数据提取、编程语言、网页爬虫...

Global site tag (gtag.js) - Google Analytics