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. C# 获取word批注信息

    今天在Silverlight 应用程序中实现了 获取word文档批注信息 的功能. 在wcf服务继承接口类中编写的函数如下 /// <summary> /// 获取word批注信息 /// ...

  2. 性能测试vs负载测试vs压力测试-概念普及

    下面我们主要介绍性能测试.负载测试和压力测试. 效率作为ISO 9126内部和外部质量的重要质量属性之一,其含义是在规定条件下,相对于所用的资源的数量,软件产品可提供适当性能的能力.资源可能包括其他软 ...

  3. Unity3D Mathf函数

    Mathf.Abs绝对值 计算并返回指定参数 f 绝对值. Mathf.Acos反余弦 static function Acos (f : float) : float 以弧度为单位计算并返回参数 f ...

  4. Spring mvc get和post传值乱码问题

    1.url拼值 传单值 对象 list  map都是用json的格式传入后台 <%@ page language="java" contentType="text/ ...

  5. 【原创】Hadoop机架感知对性能调优的理解

    Hadoop作为大数据处理的典型平台,在海量数据处理过程中,其主要限制因素是节点之间的数据传输速率.因为集群的带宽有限,而有限的带宽资源却承担着大量的刚性带宽需求,例如Shuffle阶段的数据传输不可 ...

  6. sqlMetal用法和例子 自定义DBML

    SqlMetal是跟随VS发布的一个自动工具,可以用来生成数据库的Linq代码. 这是中文版的帮助文件. SqlMetal [选项] [<输入文件>] 为 .NET Framework 的 ...

  7. [转]freemaker格式化日期

    转至:http://wentao365.iteye.com/blog/2047234 1.格式化日期 ${updated?string("yyyy-MM-dd HH:mm:ss") ...

  8. JavaScript- 图片无缝滚动

    图片向上.向下.向左.向右不间断无缝滚动. 图片向下滚动: <div id="colee" style="overflow: hidden; height: 253 ...

  9. 将list转换为json失败

    估计你是用的hibernate的自动注解,并且里面有一对多,多对一的关系,这是需要在不需要的字段上加上注解@JsonIgnore, 这样的话在list转json的时候就会忽略加上@JsonIgnore ...

  10. Rediss_基本介绍

    Redis是典型的NoSQL数据库( Not Only SQL) NoSQL数据库: NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起, 传统的关系数据库在应付web2.0网站, 特 ...