`
linvar
  • 浏览: 254043 次
  • 性别: 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爬虫正则表达式.doc

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

    python正则表达式的学习资料

    python正则表达式的学习资料,内有图文,详细的讲述了正则表达式的机理

    python正则表达式学习.zip

    python正则表达式学习之后的笔记,加载的是python的re模块。

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

    正则表达式3.1 正则表达式基础知识3.2 正则表达式实例 1. 数值与布尔型 数值类型 整型int 浮点型float 布尔型 True False # 查看数据类型用type() a = 1 b = 1.1 c = True d = False print(type(a),type(b),type(c)...

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

    python学习笔记,包含sys模块简介-与操作系统进行交互-CSV文件和CSV模块-正则表达式

    python 正则表达式语法学习笔记

    Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。 compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一...

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

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

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

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

    Python—-正则表达式

    Python学习之路,点击有全套Python笔记 常用特殊符号和字符: 匹配一个范围[]:[A-Z0-9] 匹配前面出现的正则表达式任意多次,包含0次 *:[abc]* 匹配前面出现的正则表达式0次或1次 ?:a? 匹配前面出现的正则表达式一...

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

    本文档是小小明个人的学习笔记,涵盖了正则表达式的各个方面,包括各种模式、分组、断言。 正则的匹配、查找、替换和切割一节包含各种典型的实际案例,各类使用场景。 正则匹配规则表,方便我们随时查询正则的规则,...

    Python 笔记源码.7z

    10-正则表达式 11-Git 12-电子词典 13-HTMLCSS第一部分 14-HTML&CSS第二部分 15-前端项目 16- fask 17- Ajax 18-博客项目 19-Django 20-天天果园项目 21-爬虫基础 22-爬虫高级 23-Numpy基础,数据分析 24-机器学习...

    Python 笔记源码【笔记+教程+示例源码】.zip

    10-正则表达式 17- Ajax 05-面向对象 02-Python基础第一部分 09-MongoDB数据库 04-Python基础第三部分 03-Python基础第=二部分 30-.人脸识别 27-支持向量机,聚类 28-推荐引擎,自然语言 26-朴素贝叶斯分类 29-语言...

    python学习笔记(九)正则表达式

    1)什么是正则表达式? 2)用regex实现以上代码 re中的数字字符 创建正则表达式对象 匹配 Regex对象 你一定熟悉文本查找、文本输入。比如我们谷歌一个问题来寻找答案,或则在我们的计算机里搜索文件。我们也会填写...

    Python 爬虫学习笔记之正则表达式

    想要学习 Python 爬虫 , 首先需要了解一下正则表达式的使用,下面我们就来看看如何使用。 . 的使用这个时候的点就相当于一个占位符,可以匹配任意一个字符,什么意思呢?看个例子就知道 import re content = ...

    基于Python的django 正则 个人笔记

    django初期学习笔记 还有Python的正则表达式 建议sublime打开

    《Python网络爬虫与信息提取》第三周 网络爬虫之实战 学习笔记(一)Re(正则表达式)库入门

    (2)正则表达式的概念 (3)正则表达式的举例 (4)正则表达式的特点 (5)正则表达式在文本处理中十分常用 (6)正则表达式的使用 2、正则表达式的语法 (1)正则表达式的语法的定义 (2)正则表达式的常用操作符 ...

    python学习笔记

    python 基础学习笔记内容位自学阶段所记录 从数据结构 到函数 对象 闭包 装饰器 正则表达式.....短小精悍,适合闲读。本来想直接发出来,pdf没办法上传到博客,我已经一年多不更博客了。

    python源码笔记实战 物超所值

    10-正则表达式 11-Git 12-电子词典 13-HTMLCSS第一部分 14-HTML&CSS第二部分 15-前端项目 16- flask 17- Ajax 18-博客项目 19-Django 20-天天果园项目 21-爬虫基础 22-爬虫高级 23-Numpy基础,数据分析 24-机器学习...

Global site tag (gtag.js) - Google Analytics