`

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。

 
 

 

分享到:
评论

相关推荐

    清华大学精品Python学习PPT课件-第5章 Python正则表达式.pptx

    这部分可能包含实践练习,以巩固学习到的字符串和正则表达式知识,小结则总结本章的关键概念和技术,帮助学习者巩固理解并准备应对实际问题。 总的来说,掌握Python中的字符串处理和正则表达式是任何Python开发者...

    python正则表达式匹配不包含某几个字符的字符串方法

    本文将分享如何使用Python正则表达式来匹配不包含特定字符集的字符串。 首先,我们来看一个基本的正则表达式匹配例子。假设我们要从一个字符串中找出所有以“https?”开头,后面跟着“://”,然后再以“.jpg”、“....

    Python正则表达式基础

    正则表达式的基础包括字符匹配和重复匹配。字符匹配是最直接的,大部分字符和字母直接匹配自身。但在正则表达式中,存在一些特殊的字符称为元字符,它们不匹配自身,而是有特殊的意义。例如,方括号[ ]内定义了一个...

    Python正则表达式指南.docx

    在 Python 中,使用 re 模块提供了对正则表达式的支持,包括忽略大小写、多行匹配等模式。 2. re 模块 Python 通过 re 模块提供对正则表达式的支持。使用 re 的一般步骤是先将正则表达式的字符串形式编译为 ...

    正则式工具(自动生成正则表达式)

    正则式,全称为“正则表达式”,是编程领域中一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过一系列特定的字符和语法构建模式,可以高效地处理各种复杂的文本匹配任务。在软件开发、数据处理、...

    Python3如何优雅地使用正则表达式.pdf

    10. 正则表达式的贪婪与非贪婪模式:默认情况下,正则表达式是贪婪的,意味着它们会尽可能多地匹配字符。通过在量词后面添加`?`可以使其成为非贪婪模式,如`*?`匹配尽可能少的字符。 Python3的`re`模块提供了丰富的...

    Python-Pyregex是一个开源在线的Python正则表达式编辑器测试器

    Python中的正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能用于搜索、替换和提取字符串中的模式。Pyregex项目是为Python开发者提供的一款在线的正则表达式编辑器和测试器,旨在简化...

    python正则表达式_深入浅出

    ### Python正则表达式详解 #### 一、概述 Python中的正则表达式(re)模块提供了与Perl类似的正则表达式功能。无论是正则表达式本身还是被搜索的字符串,都可以是Unicode字符,这意味着该模块能够很好地处理各种字符...

    正则表达式调试工具

    正则表达式(Regular Expression,简称regex)是用于在文本中匹配特定模式的强大工具,广泛应用于数据验证、搜索替换和文本处理等领域。正则表达式调试工具是开发人员用来测试和优化这些模式的重要辅助工具。本文将...

    Python正则表达式指南.pdf

    量词分为贪婪和非贪婪两种模式,在贪婪模式下,表达式会尽可能多地匹配字符;而在非贪婪模式下,会尽可能少地匹配字符。例如,在匹配"abbbc"时,表达式"ab*"(贪婪模式)会匹配"abbb",而"ab*?"(非贪婪模式)则会...

    精通正则表达式(第三版)简体中文版

    - **JavaScript中的正则表达式**:JavaScript的正则表达式对象提供了丰富的功能,包括全局匹配、忽略大小写等选项。 - **.NET框架中的正则表达式**:通过System.Text.RegularExpressions命名空间提供支持。 #### 六...

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

    本教程的目标是让读者快速理解正则表达式的概念,学会基本的语法结构,并能应用到实际的Python代码中,进行字符串匹配和处理。 二、如何使用本教程 建议读者跟随教程的步骤,逐步实践每个例子,加深理解和记忆。...

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

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

    python学习手册第四版+正则表达式表

    Python通过`re`模块支持正则表达式的操作,主要包括正则表达式的编译、匹配和搜索等功能。 **5.1 编译正则表达式** - `re.compile(strPattern[, flag])`: 将正则表达式字符串编译为Pattern对象。`flag`参数用于...

    [小小明]Python正则表达式全套笔记v0.3(1.8万字干货)

    贪婪模式、非贪婪模式和独占模式是正则表达式的三种匹配模式。 2.4 原生字符串简化反斜杠 \ 原生字符串简化反斜杠 \ 是一种特殊的字符,可以用来转义其他字符。 2.5 分组 分组包括捕获组、非捕获组、命名分组等。 ...

    正则表达式学习资料以及练习项目代码很多

    - **正则表达式性能优化**:避免过度复杂的正则表达式,合理使用非贪婪匹配,减少回溯。 - **正则表达式调试**:使用`re.DEBUG`标志编译正则表达式,查看其内部结构。 - **正则表达式在其他语言中的差异**:虽然...

    正则表达式匹配/可以自定义正则表达式

    正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配字符串...在压缩包文件"正则表达式匹配"中,你可能找到更多关于正则表达式实际应用的实例和教程,这将有助于你加深理解和提升技能。

    Python程序员必会的正则表达式

    * flags 是标志位,用于控制正则表达式的匹配方式,如:是否区分大小写、多行匹配等等。 例如,下面的代码演示了如何使用 match 函数来匹配字符串: ``` import re s = 'hello python' pattern = 'hello' v = re....

    通过正则表达式生成数据

    正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配、查找、替换等操作,涉及字符串的模式匹配。在本主题中,我们将深入探讨如何使用正则表达式来生成满足特定条件的随机数据。这在...

Global site tag (gtag.js) - Google Analytics