#!/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。
相关推荐
如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...
python之常用正则表达式.pdfpython之常用正则表达式.pdfpython之常用正则表达式.pdfpython之常用正则表达式.pdfpython之常用正则表达式.pdfpython之常用正则表达式.pdf
本文实例讲述了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等编程语言的解决方案。...
正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。如果表达式中有量词或边界,这个过程会稍微有一些不同,但也是很好理解...
正则表达式处理字符串主要有四大功能,匹配、获取、替换和分割: 匹配 的功能是查看一个字符串是否符合正则表达式的语法,一般返回true或者false; 获取 的功能是正则表达式来提取字符串中符合要求的文本; 替换 的...
PPT 讲述了正则表达式的使用方式以及如何使用python来操作正则表达式,内容简洁实用,适合平时查询,也适合PPT演讲使用~
一个描述全部python正则方法,正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。 ...
第11.25节 Python正则表达式编译re.compile及正则对象使用.rar
python正则表达式_深入浅出
三、 正则表达式到底是什么东西? 3 四、 入门 4 五、 测试正则表达式 6 六、 元字符 7 七、 字符转义 9 八、 重复 9 九、 字符类 9 十、 分枝条件 10 十一、 分组 11 十二、 反义 12 十三、 后向引用 12 十四、 零...
PHP常用正则表达式汇总,平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用
python正则表达式使用指南,中英文对照,简洁易懂,个人觉得非常好,能很快学会试用正则表达式。
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符)操作 的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规 则字符串”,这个“规则字符串”用来表达...
python正则表达式详细图 python正则表达式详细图 python正则表达式详细图
06-正则表达式(python和linux高级编程阶段 代码和截图)06-正则表达式(python和linux高级编程阶段 代码和截图)06-正则表达式(python和linux高级编程阶段 代码和截图)06-正则表达式(python和linux高级编程阶段 ...
Python正则表达式操作指南 Python正则表达式操作指南 Python正则表达式操作指南
如今,正则表达式已经成为众多语言及工具——Perl、PHP、Java、Python、Ruby、MysQL、VB.NET和c#(以及.NET Framework中的任何语言)——中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本...
根据官方推荐的正则表达式编辑器redemo.py源文件编译而成的windows系统下的免控制台工具。本软件可以对正则表达式进行编辑验证。