2015年8月14日

11:10

7.2正则表达式操作

正则表达式使用反斜杠字符'\'来暗示一些特殊的形式或者允许特殊的字符使用但是没有调用它们特殊的意思。在字符串常量中的相同目标的字符的python中的用法也是有冲突的,例如,为了匹配常量反斜杠,一个可能的是必须写'\\\\'作为模式字符串,因为正则表达式必须是\\,并且每个反斜杠必须是被镶嵌在有规律的python字符串常量中\\

一个对于使用python的原始字符串符号的正则表达式用法模式的解决办法是,反斜杠不会被处理用任何特殊方式用字符串常量前缀'r'。所以r'\n'就是一个两个字符的包含'\'和'n',当'\n'表示一个字符串的包含一个新行。通常模式将会在python代码中表示用这个原始的字符串标记。

我们需要注意大多数正则表达式操作符是可用的在模块水平的函数和正则对象方法中。函数是快捷方式不要求你首先完成正则对象,但是会遗漏一些微调的元素

7.2.1正则表达式语法

一个正则表达式(或者RE)指定一个可以和它匹配的字符串集合。在这个模块中的函数让你检查是否一个特别字符串会匹配被给的正则表达式(或者是否一个被给的正则表达式会匹配一个特别的字符串,这个可以归结为同样的事情)

正则表达式可以被串联为一种新的表达式;如果A和B都是正则表达式,那么AB也是一个正则表达式。通常,如果一个字符串p匹配A而且另一个字符串q匹配B,那么字符串pq将会匹配AB。这表示除非A或者B包含滴游戏操作;边界条件在A和B,或者有数字组的参考。从而,复杂的表达式可以容易地构造从更简单原始的表达式像一个描述这里。详细来看这个理论和正则表达式的实现,请教参考书在上面的,或者几乎任何的文本关于编译的构造。

下面是一个简单的正则表达式解释。为了更远的信息和一个更温和的描述,咨询正则表达式HOWTO.

正则表达式可以包含特指的和平凡的字符。大多数平凡的字符,如'A','a'或者'0',是最简单的正则表达式,它们简单地匹配它们自己。你能串联平凡的字符,所以最后的匹配字符'last'.(在本节的其余部分,我们在这种特殊风格来写RE,通常没有引用,而且字符可以被匹配在这个简单的引用中。

一些字符,像'|'或者'(',是特指的。特别的字符代表着普通字符的一类,或者影响正则表达式环绕它们被干扰。正则表达式的模式字符串可能不会包含null字节,但是可以空null字节使用\number 标识,例如 '\x00'

这些特殊的字符有:

'.'  点,在默认的模式中,这个匹配任何字符除了新的一行。如果DOTALL 标记已经被指定,这个匹配任何字符包括新的一行。

'^'      ^插入符号,匹配字符串的开始,而且在MULTILINE(多行)模式的新的一行后也立即匹配

'$'   匹配字符串的结束或者仅仅在字符串末尾的新行开始前,并且在MULTILINE(多行)模式的新的一行行开始前也匹配。foo 匹配 'foo' 和  'foorbar',当正则表达式foo$匹配仅仅只能是'foo'。更有兴趣的是,搜索foo.*在  'foo1\nfoo2\n'匹配'foo2'正常,但是'foo1'在多行模式中是正常的。搜索一个简单的 $ 在'foo\n'将会发现两个(空的)匹配,一个就是在新的一行开始前,而另一个就是在字符串的末尾。

import re

pattern=re.compile('foo.$')

print re.findall(pattern,'foo1\nfoo2\n')

'*'    造成一个结果让RE去匹配0或者更多的重复在RE表达式,尽可能重复  。  ab*就是匹配'a' ,'ab',或者'a'后面跟随很多次的'b'   'a'后面跟随很多'b'这个要注意

'+'   造成一个结果RE去匹配1或者更多重复次数在RE表达式之前。 ab+ 就是匹配'a'后面跟随许多非0次的'b',他将不再匹配仅仅'a'

'?'  造成一个结果就是让RE去匹配0或者1次重复在RE表达式中。  ab?就是匹配

'a'或者'ab'

*?,+?,??   这个'*','+'和'?'限定是所有的贪婪,它们尽可能地匹配文本。有时候这个行为不是渴望想得到的;如果RE表达式<.*>是竞争匹配'<H1>title</H1>',那么将会匹配整个字符串,而不仅仅是'<H1>'。添加'?'在这个限定符之后会让它执行匹配用非贪婪模式或者最小式样,在尽可能少的字符串会被匹配。用.*? 在先前的表达式中将会匹配仅仅<H1>

{m}  特别地这个m 复制了之前的RE应该是匹配,更少的匹配让整个RE表达式不去匹配。例如,a{6}将会精准匹配6个'a'字符,而不是5个

{m,n}   让产生结果导致RE表达式去匹配m到n个重复次数对于准备好的RE,尝试着去匹配尽可能的次数。例如,a{3,5}将会匹配从3到5次'a'字符。省略m次会有一个更小的边界,比如0.如果忽略n特指一个无限大的边界。作为一个例子,a{4,}b那么会 匹配 aaaab或者一千次'a'字符然后后面跟着一个b,而不是aaab。 这个逗号不能忽略或者修改,这将会混淆之前描述的内容。

{m,n}?   让产生结果导致RE去匹配从m到n次重复的表达式,尝试着去匹配尽可能少的次数。这是非贪婪的版本对之前之前的限定词。例如,在一个6次的字符串'aaaaaa',a{3,5}将会匹配 5'a'字符,然而a{3,5}?将仅仅匹配3个字符串。

'\'     转义符特指的字符(允许你去匹配像* ,?等等这些字符),或者一串特别的符号,尤其下述被讨论的序列。如果你不用一个原始的字符串去表示模式,记得python也在字符串序列中用反斜杠作为一个转义符;如果这个专业符序列不能识别被python的解析器,那么反斜杠和字序列是被包括在产生字符串中。然而,如果python识别了产生的字符串,反斜杠应该被重复两次。这是复杂和困难的去理解,所以强烈推荐用原始字符串对于所有而不是简单的表达式。

python中关于正则表达式三的更多相关文章

  1. 在python中使用正则表达式(三)

    这里主要说一下贪婪匹配和非贪婪匹配  贪婪匹配:匹配尽可能多的字符:  非贪婪匹配:匹配尽可能少的字符 python的正则匹配默认是贪婪匹配 例子: >>> re.match(r'^ ...

  2. 在Python中使用正则表达式同时匹配邮箱和电话并进行简单的分类

    在Python使用正则表达式需要使用re(regular exprssion)模块,使用正则表达式的难点就在于如何写好p=re.compile(r' 正则表达式')的内容. 下面是在Python中使用 ...

  3. python模块 re模块与python中运用正则表达式的特点 模块知识详解

    1.re模块和基础方法 2.在python中使用正则表达式的特点和问题 3.使用正则表达式的技巧 4.简单爬虫例子 一.re模块 模块引入; import re 相关知识: 1.查找: (1)find ...

  4. Python学习-37.Python中的正则表达式

    作为一门现代语言,正则表达式是必不可缺的,在Python中,正则表达式位于re模块. import re 这里不说正则表达式怎样去匹配,例如\d代表数字,^代表开头(也代表非,例如^a-z则不匹配任何 ...

  5. [Python]网络爬虫(七):Python中的正则表达式教程

    转自:http://blog.csdn.net/pleasecallmewhy/article/details/8929576#t4 接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一 ...

  6. [Python]网络爬虫(七):Python中的正则表达式教程(转)

    接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一下Python中的正则表达式的相关内容. 正则表达式在Python爬虫中的作用就像是老师点名时用的花名册一样,是必不可少的神兵利器. ...

  7. Python::re 模块 -- 在Python中使用正则表达式

    前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...

  8. Python学习-38.Python中的正则表达式(二)

    在Python中,正则表达式还有较其他编程语言有特色的地方.那就是支持松散正则表达式了. 在某些情况,正则表达式会写得十分的长,这时候,维护就成问题了.而松散正则表达式就是解决这一问题的办法. 用上一 ...

  9. 在python中使用正则表达式(转载)

    https://www.cnblogs.com/hanmk/p/9143514.html 在python中使用正则表达式(一)   在python中通过内置的re库来使用正则表达式,它提供了所有正则表 ...

随机推荐

  1. Mysql监控工具小集合

    介绍一些常见的Mysql监控工具. Cacti Cacti是 一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具.它通过snmpget来获取数据,使用 RRDtool绘 ...

  2. WinForm打印之页边距

    1.启用页边距: 默认情况下PrintDocument是不理会页边距的(MS再次让人无语...),这也是为什么有人说明明设了页边距在打印预览里却没有效果的原因. 解决办法是设置PrintDocumen ...

  3. 【转】Install MATLAB 2013a on CentOS 6.4 x64 with mode silent

    首先要下载安装光盘. Matlab801_MacUnix.iso [root@db-172-16-3-150 mnt]# md5sum /ssd1/Matlab801_MacUnix.iso  0d3 ...

  4. 泰泽新闻:英特尔三星双否认泰泽Tizen系统已死

    7月8日 据媒体TizenExperts报道,关于“Tizen系统跳票”的传闻已经遭到了英特尔和三星否认. 此前传闻三星自行研制的智能手机Tizen操作系统流产,但如今已经遭到了官方的否认. 英特尔三 ...

  5. Docker系列(一)安装

    操作系统版本:Centos7 Docker版本:1.8 设置安装源 1  cat > /etc/yum.repos.d/docker.repo << -EOF 2  [dockerr ...

  6. 最简单的基于FFMPEG的音频编码器(PCM编码为AAC)

    http://blog.csdn.net/leixiaohua1020/article/details/25430449 本文介绍一个最简单的基于FFMPEG的音频编码器.该编码器实现了PCM音频采样 ...

  7. 问题-[Delphi]MainFrame.pas(4340): E2036 Variable required

    问题现象:写了一个TObjectList的Sort方法,但是写成ObjectList.Sort(@SortBridgeEDOReportQtys); 再F9时提示“E2036 Variable req ...

  8. A Tour of Go Struct Fields

    Struct fields are accessed using a dot. package main import "fmt" type Vertex struct { X i ...

  9. system partition table

    转载内容 摘录部分我的笔记的中doc,和大家一起感受Oracle 11g在分区方面的增强--System Partitioning 系统分区的特点 ●系统分区与其他分区相比,一个最根本的区别就是不需要 ...

  10. Webdriver:Unsupported Marionette protocol version 2, required 3

    升级到firefox到47以上版本即可 坑人的Mozilla不能起个我们熟识的名字吗? 先是webdriver.gecko.driver后是Marionette protocol.   1.WebDr ...