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. NOIP2011普及组 瑞士环 保序性

    题目链接:http://noi.openjudge.cn/ch0401/4363/ 分析:如果直接模拟,时间复杂度是O(r*nlogn)超时 然后我们发现每次一轮开始时,刚开始是保序的,然后我们可以把 ...

  2. [MarsZ]程序猿谈大学之大学应该学好哪些课程

    大家好,我是MarsZ,上次给大家带来了程序猿Mars谈大学之大学应该怎么过 ,反响还不错(……),这次继续给大家分析一下大学应该学好哪些课程. 首先必须说明两点:一,以下我说的仅代表个人观点.二,仅 ...

  3. wuzhicms 发送邮件

    发送邮件 //邮件发送 $config = get_cache('sendmail'); $siteconfigs = get_cache('siteconfigs'); $password = de ...

  4. mysql 中文乱码的解决办法

    I would not suggest Richies answer, because you are screwing up the data inside the database. You wo ...

  5. WPF布局系统[转]

    转自:http://www.cnblogs.com/niyw/archive/2010/10/31/1863908.html前言 前段时间忙了一阵子Google Earth,这周又忙了一阵子架构师论文 ...

  6. TCP、UDP、IP包头结构分析(转)

    1.TCP数据段格式 TCP是一种可靠的.面向连接的字节流服务.源主机在传送数据前需要先和目标主机建立连接.然后,在此连接上,被编号的数据段按序收发.同时,要求对每个数据段进行确认,保证了可靠性.如果 ...

  7. Linux学习笔记——软件包管理

    1.RPM包的管理 RPM软件包的一个例子: sudo-1.7.2p1-5.el5.i386.rpm 这个rpm包名包括软件名sudo,版本号1.7.2p1,发行号5.el5,和硬件平台i386 (1 ...

  8. hdu4433 locker

    暴力dp.. dp[i][j][k] 表示 前i位完全匹配 j 表示i+1位 k表示i+2位 枚举j k #include<iostream> #include<cstdio> ...

  9. WIN10环境下搭建与连接VPN服务器

    搭建VPN服务器 0.前言 1.WIN+E打开此电脑 2.勾选始终显示菜单,并应用,确定 3.新建传入连接,可以添加用户,也可以直接选取已有用户 连接VPN服务器 1.打开vpn设置 2.添加vpn连 ...

  10. bzoj3926: [Zjoi2015]诸神眷顾的幻想乡 对[广义后缀自动机]的一些理解

    先说一下对后缀自动机的理解,主要是对构造过程的理解. 构造中,我们已经得到了前L个字符的后缀自动机,现在我们要得到L+1个字符的后缀自动机,什么需要改变呢? 首先,子串$[0,L+1)$对应的状态不存 ...