`

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正则表达式指南.docx

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

    神奇的匹配 正则表达式求精之旅 带书签

    "神奇的匹配 正则表达式求精之旅"这本书,显然是一本深入探讨这一主题的专业读物,旨在帮助读者理解和掌握正则表达式的精髓。 正则表达式,简称为regex,是一种模式匹配语言,用于在字符串中查找、替换或提取符合...

    正则表达式调试工具

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

    python正则表达式使用指南

    【Python正则表达式使用指南】是一篇专为Python初学者设计的教程,旨在帮助读者理解和运用Python中的正则表达式。这篇文档采用中英文对照的方式,内容清晰易懂,适合快速学习和实践。 正则表达式是用于匹配字符串的...

    Python正则表达式基础

    Python正则表达式是Python编程语言中的一个强大工具,用于处理和分析文本字符串。它允许开发者通过模式匹配来查找、替换或提取数据,广泛应用于数据清洗、文本挖掘、日志分析等领域。在Python中,正则表达式主要通过...

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

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

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

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

    Python正则表达式操作指南%2B-%2BUbuntu中文.pdf

    ### Python正则表达式操作指南知识点详解 #### 1....以上知识点总结了从简单模式到高级模式,再到实际应用的各个方面,涵盖了使用Python中的`re`模块进行正则表达式操作所需的核心概念和技术细节。

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

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

    通过正则表达式生成数据

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

    python正则表达式.zip

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

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

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

    使用正则表达式拆分字符串

    - **模式匹配**:正则表达式由一系列字符和特殊符号组成,用于定义一个模式,该模式可以匹配特定的字符串。 - **元字符**:如`*`, `+`, `?`, `{}`, `[]`, `\`等,它们具有特殊的含义,用于指定重复次数、选择范围...

    [Python]网络爬虫(七):Python中的正则表达式教程.pdf

    它可以用于搜索、匹配和替换文本中的字符串模式。在Python中,正则表达式是一种灵活、强大的工具,被广泛应用于字符串处理,尤其是在网络爬虫开发中。 2. `re`模块的基本用法 - `***pile(pattern[, flags])`:编译...

    常用正则表达式 正则表达式

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。它通过一种特殊的语法来描述一个字符串集合,可以非常灵活地表示各种复杂的字符串格式...

    Shell与Python正则表达式参考

    在Python中,正则表达式提供了更多高级功能,如非贪婪匹配、分组、后向引用等,可以进行更复杂的模式匹配和字符串操作。Python的`re`模块提供了`search()`, `match()`, `findall()`, `sub()`等方法来执行正则表达式...

    Python-PythonCreateReProjectpython自动生成正则表达式项目

    标题"Python-PythonCreateReProjectpython自动生成正则表达式项目"揭示了这个项目的核心——用Python编写一个工具,能够根据用户提供的输入字符串和预期匹配结果,自动创建相应的正则表达式。这解决了手动构造正则...

    正则表达式.txt,正则表达式.txt

    2. **贪婪与懒惰匹配**:默认情况下,量词如 `*` 和 `+` 是贪婪的,即尽可能多地匹配字符。若需要懒惰匹配,则可以在量词后添加 `?`。 3. **性能问题**:复杂的正则表达式可能导致性能问题,特别是在处理大量文本时...

Global site tag (gtag.js) - Google Analytics