`

python 贪婪和非贪婪、多行匹配正则表达式小结

阅读更多
#!/usr/local/bin/python
#coding:GBK
import re
fopen=open(r'/tmp/1.txt','r')
f=fopen.read().strip()

print "输出1.txt文件内容"
print f
print "---------------------------------------"

print "贪婪匹配,re.S('.'匹配字符,包括换行符)"
print re.findall(r"AAA(.*)CCC",f,re.S)
print "---------------------------------------"

print "非贪婪匹配,re.S('.'匹配字符,包括换行符)"
list=re.findall(r"AAA(.*?)CCC",f,re.S)
print list
print "---------------------------------------"

print "re.M匹配多行,这里把换行符匹配掉"
for i in list:
        print re.findall(r"(\d+)",i,re.M)
print "---------------------------------------"

print "把匹配出来的字段放到一个数组"
array=[]
for lst in list:
        re_list=re.findall(r"(\d+)",lst,re.M)
        for i in re_list:
                array.append(i)
for i in array:
        print i

输出的结果:
输出1.txt文件内容
AAA
123
314
5246
CCC
AAA
32422
CCC
---------------------------------------
贪婪匹配
['\n123\n314\n5246\nCCC\nAAA\n32422\n']
---------------------------------------
非贪婪匹配,re.S('.'匹配字符,包括换行符)
['\n123\n314\n5246\n', '\n32422\n']
---------------------------------------
re.M匹配多行,这里把换行符匹配掉
['123', '314', '5246']
['32422']
---------------------------------------
把匹配出来的字段放到一个数组
123
314
5246
32422
复制代码
 
python贪婪和非贪婪
  正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪则相反,总是尝试匹配尽可能少的字符。在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。
复制代码
>>> s="This is a number 234-235-22-423"
>>> r=re.match(".+(\d+-\d+-\d+-\d+)",s)
>>> r.group(1)
'4-235-22-423'
>>> r=re.match(".+?(\d+-\d+-\d+-\d+)",s)
>>> r.group(1)
'234-235-22-423'
>>> 
复制代码
  正则表达式模式中使用到通配字,那它在从左到右的顺序求值时,会尽量“抓取”满足匹配最长字符串,在我们上面的例子里面,“.+”会从字符 串的启始处抓取满足模式的最长字符,其中包括我们想得到的第一个整型字段的中的大部分,“\d+”只需一位字符就可以匹配,所以它匹配了数字“4”,而“.+”则匹配了从字符串起始到这个第一位数字4之前的所有字符。
  解决方式:非贪婪操作符“?”,这个操作符可以用在"*","+","?"的后面,要求正则匹配的越少越好。
 
  下面这个例子仔细体会下
复制代码
>>> re.match(r"aa(\d+)","aa2343ddd").group(1)
'2343'
>>> re.match(r"aa(\d+?)","aa2343ddd").group(1)
'2'
>>> re.match(r"aa(\d+)ddd","aa2343ddd").group(1) 
'2343'
>>> re.match(r"aa(\d+?)ddd","aa2343ddd").group(1)
'2343'
>>> 
复制代码
 
python的多行匹配
r=re.complile(pattern,re.M)
re.M(re.MULTILINE):多行模式,改变'^'和'$'的行为,即^$标志将会匹配每一行。
>>> re.findall(r"^a(\d+)b","a213b\na2345b\na234b") 
[
'213']
>>> re.findall(r"^a(\d+)b","a213b\na2345b\na234b",re.M) ['213', '2345', '234']
>>> re.findall(r"a(\d+)b","a213b\na2345b\na234b") #如果没有^标志,无需re.M ['213', '2345', '234']

tips:”^”匹配字符串的开始,在MULTILINE模式下,也匹配换行符之后。

 

re.S(re.DOTALL):点任意匹配模式

元字符“.”在默认模式下,匹配除换行符外的所有字符。在DOTALL模式下,匹配所有字符,包括换行符。

>>> re.findall(r".","\n",re.S)                         
['\n']

  如需转载,请注明地址http://www.cnblogs.com/belid/archive/2013/04/27/python.html。

 
 

 

分享到:
评论

相关推荐

    常用java正则表达式

    如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...

    python之常用正则表达式.pdf

    python之常用正则表达式.pdfpython之常用正则表达式.pdfpython之常用正则表达式.pdfpython之常用正则表达式.pdfpython之常用正则表达式.pdfpython之常用正则表达式.pdf

    Python正则表达式非贪婪、多行匹配功能示例

    本文实例讲述了Python正则表达式非贪婪、多行匹配功能。分享给大家供大家参考,具体如下: 一些regular的tips: 1 非贪婪flag >>> re.findall(r"a(\d+?)","a23b") # 非贪婪模式 ['2'] >>> re.findall(r"a(\d+)",...

    正则表达式经典实例

    对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,《正则表达式经典实例》给出了涉及基于C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等编程语言的解决方案。...

    Python正则表达式标准库使用教程.pdf

    正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。如果表达式中有量词或边界,这个过程会稍微有一些不同,但也是很好理解...

    Python程序设计:正则表达式检索与替换.pptx

    正则表达式处理字符串主要有四大功能,匹配、获取、替换和分割: 匹配 的功能是查看一个字符串是否符合正则表达式的语法,一般返回true或者false; 获取 的功能是正则表达式来提取字符串中符合要求的文本; 替换 的...

    “正则表达式以及python re模块”演讲PPT

    PPT 讲述了正则表达式的使用方式以及如何使用python来操作正则表达式,内容简洁实用,适合平时查询,也适合PPT演讲使用~

    python正则表达式全部方法

    一个描述全部python正则方法,正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。 ...

    第11.25节 Python正则表达式编译re.compile及正则对象使用.rar

    第11.25节 Python正则表达式编译re.compile及正则对象使用.rar

    python正则表达式_深入浅出

    python正则表达式_深入浅出

    Python基础入门知识之正则表达式学习 正则表达式30分钟入门教程 共21页.pdf

    三、 正则表达式到底是什么东西? 3 四、 入门 4 五、 测试正则表达式 6 六、 元字符 7 七、 字符转义 9 八、 重复 9 九、 字符类 9 十、 分枝条件 10 十一、 分组 11 十二、 反义 12 十三、 后向引用 12 十四、 零...

    PHP常用正则表达式汇总

    PHP常用正则表达式汇总,平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用

    python正则表达式使用指南

    python正则表达式使用指南,中英文对照,简洁易懂,个人觉得非常好,能很快学会试用正则表达式。

    python正则表达式.zip

    正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符)操作 的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规 则字符串”,这个“规则字符串”用来表达...

    python正则表达式详细图

    python正则表达式详细图 python正则表达式详细图 python正则表达式详细图

    06-正则表达式(python和linux高级编程阶段 代码和截图)

    06-正则表达式(python和linux高级编程阶段 代码和截图)06-正则表达式(python和linux高级编程阶段 代码和截图)06-正则表达式(python和linux高级编程阶段 代码和截图)06-正则表达式(python和linux高级编程阶段 ...

    Python正则表达式操作指南 Python正则表达式操作指南

    Python正则表达式操作指南 Python正则表达式操作指南 Python正则表达式操作指南

    精通正则表达式 中英文

    如今,正则表达式已经成为众多语言及工具——Perl、PHP、Java、Python、Ruby、MysQL、VB.NET和c#(以及.NET Framework中的任何语言)——中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本...

    正则表达式.exe

    根据官方推荐的正则表达式编辑器redemo.py源文件编译而成的windows系统下的免控制台工具。本软件可以对正则表达式进行编辑验证。

Global site tag (gtag.js) - Google Analytics