【Python】Python学习笔记(二)——正则表达式

原创 2017年05月02日 10:48:52

正则表达式的大致匹配过程

1.依次拿出表达式和文本中的字符比较,
2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。
3.如果表达式中有量词或边界,这个过程会稍微有一些不同。

这里写图片描述


数量词的贪婪模式与非贪婪模式

正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式”ab*”如果用于查找”abbbc”,将找到”abbb”。而如果使用非贪婪的数量词”ab*?”,将找到”a”。

注:一般使用非贪婪模式来提取。

反斜杠问题

与大多数编程语言相同,正则表达式里使用”\”作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符”\”,那么使用编程语言表示的正则表达式里将需要4个反斜杠”\\”:前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。


import re
re.compile(string[,flag])  
#以下为匹配所用函数
#参数flag是匹配模式,取值可以使用按位或运算符’|’表示同时生效,比如re.I | re.M。
re.match(pattern, string[, flags])
re.search(pattern, string[, flags])
re.split(pattern, string[, maxsplit])
re.findall(pattern, string[, flags])
re.finditer(pattern, string[, flags])
re.sub(pattern, repl, string[, count])
re.subn(pattern, repl, string[, count])

 • re.I(全拼:IGNORECASE): 忽略大小写(括号内是完整写法,下同)
 • re.M(全拼:MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图)
 • re.S(全拼:DOTALL): 点任意匹配模式,改变'.'的行为
 • re.L(全拼:LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
 • re.U(全拼:UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
 • re.X(全拼:VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。

1.string: 匹配时使用的文本。
2.re: 匹配时使用的Pattern对象。
3.pos: 文本中正则表达式开始搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。
4.endpos: 文本中正则表达式结束搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。
5.lastindex: 最后一个被捕获的分组在文本中的索引。如果没有被捕获的分组,将为None。
6.lastgroup: 最后一个被捕获的分组的别名。如果这个分组没有别名或者没有被捕获的分组,将为None。
方法:
1.group([group1, …]):
获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group1可以使用编号也可以使用别名;编号0代表整个匹配的子串;不填写参数时,返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。
2.groups([default]):
以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last)。default表示没有截获字符串的组以这个值替代,默认为None。
3.groupdict([default]):
返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内。default含义同上。
4.start([group]):
返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引)。group默认值为0。
5.end([group]):
返回指定的组截获的子串在string中的结束索引(子串最后一个字符的索引+1)。group默认值为0。
6.span([group]):
返回(start(group), end(group))。
7.expand(template):
将匹配到的分组代入template中然后返回。template中可以使用\id或\g、\g引用分组,但不能使用编号0。\id与\g是等价的;但\10将被认为是第10个分组,如果你想表达\1之后是字符’0’,只能使用\g0。

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

在爬取网页信息的时候,是否有过用循环截取字符串的
  • u012878497
  • u012878497
  • 2014年04月26日 01:43
  • 366

《python3廖雪峰》正则表达式匹配Email地址练习题答案

《python3廖雪峰》正则表达式章节最后留了这个题目,对于初学者还是要折腾一下才能做出来的,我作为初学者,花了1个小时研究出来了,当然只是针对题目中的3种Email地址的正则匹配,如果想写出通用的E...
  • sunflowerduidui
  • sunflowerduidui
  • 2016年05月24日 13:07
  • 2856

Python 正则表达式练习

美女发来的电话号码是这样的。 想个办法让他变清爽。 #coding=utf-8 import re phone = "1*5*1*1*0*3*3*6*4*9*1 #美女发来的电话号码" ...
  • blog_liuliang
  • blog_liuliang
  • 2016年07月05日 19:49
  • 1917

Python正则表达式中文手册

Python正则表达式操作指南 原文出处:http://www.amk.ca/python/howto/regex/ 原文作者:A.M. Kuchling (amk@amk.ca)...
  • qianlong4526888
  • qianlong4526888
  • 2013年09月02日 20:25
  • 2277

Python学习笔记(一)基础语法

Python标识符 在python里,标识符有字母、数字、下划线组成。 在python中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。 python中的标识符是区分大小写的...
  • aa294194253
  • aa294194253
  • 2015年02月15日 10:02
  • 564

python正则表达式实用例子

基础不提了,实际当中所遇到的问题需要解决才有意义。 1,匹配整个单词(单词边界):\bcat \b 2,匹配数字:\b\d+\b   \b\d+?\b   改进后:\b\d++\b 3,匹配HT...
  • epicure
  • epicure
  • 2016年12月18日 20:32
  • 602

正则表达式快速入门(python示例)

正则表达式的作用我就不赘述了,首先讲解一下单个字符的匹配。 1、‘’.“(点):匹配除了(\n)之外的所有字符。 首先import re,以下的示例都默认已经导入了re包,不再另行说明。 string...
  • ali197294332
  • ali197294332
  • 2016年03月15日 22:19
  • 1227

Python 正则表达式 (附调试工具)

写在正文之前,正则表达式是一种威力无比强大的武器,几乎在所有的程序设计语言里和计算机平台上都可以用它来完成各种复杂的文本处理工作。所以想学习好正则表达式,就需不断的尝试写出自己的表达式来验证想法。...
  • jimmy306
  • jimmy306
  • 2016年07月28日 14:18
  • 1435

Python下的正则表达式原理和优化笔记

Python下的正则表达式原理和优化笔记 摘要 本文旨在总结一些编写表达式的技巧和原理。鉴于介绍python中re模块的使用方法的文章太多。所以本文在基础方面都是略过,而在回溯原理和一些...
  • xutaoding
  • xutaoding
  • 2014年07月01日 13:54
  • 657

Python正则表达式速查表

正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式...
  • ztf312
  • ztf312
  • 2015年08月07日 19:21
  • 1287
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Python】Python学习笔记(二)——正则表达式
举报原因:
原因补充:

(最多只允许输入30个字)