01.#!/usr/bin/env python
02.# -*- coding: utf-8 -*-
03.import re
04.
05.def regex():
06. str = 'abcdab'
07. patstr = 'ab'8. ##可以匹配的2种方式:1
09. patobj = re.compile(patstr)
10. got = patobj.match(str)
11. ##2
12. got = re.match(patstr,str)
13.
14. ##几个基本的匹配函数
15. result = re.match('ab','abcd') #match方法基本等同于re.search('^ab','abcd'),即默认就是前置匹配,只匹配字串的开头
16. if result:
17. print result.group()
18. else:
19. print result
20.
21. result = patobj.match('0abcd')
22. if result:
23. print result.group()
24. else:
25. print result, 'There is no result'
26.
27. result = patobj.search('0abcd') ##匹配模式并返回第一个匹配对象
28. if result:
29. print result.group()
30. else:
31. print result
32.
33. str = 'abcdab'
34. result = patobj.findall(str) ##返回一个包含所有匹配结果的列表,如果匹配字串中有分组的话,则返回由分组内容组成的元组所组成的列表
35. if result: ##即无分组时返回有多个group()结果的列表,有分组时返回有多个groups()结果的列表, 见下
36. print type(result), result
37. else:
38. print result
39.
40. result = patobj.finditer(str) ##返回一个包含所有匹配结果的迭代器,可以配合findall使用
41. if result:
42. print type(result), result.next().group()
43. else:
44. print result
45.
46. result = patobj.sub('__','abcdab') ##用指定的字符替换所有匹配到的字符串
47. if result:
48. print 'replace:',result ##__cd__
49. else:
50. print result
51.
52. result = patobj.subn('__','abcdab') ##用指定的字符替换所有匹配到的字符串,还包括替换数目
53. if result:
54. print 'replace:',result ##('__cd__', 2)
55. else:
56. print result
57.
58.
59. ##基本的几个结果查询方法:
60. str = '[1]aaaa[2]bbbb[3]cccc@1[:]dddd'
61. result = re.search(r'\[(\d+\](.*)@1\[(.*))\]',str)
62. if result:
63. print result.group() ##返回匹配到的第一个完整字符串: [1]aaaa[2]bbbb[3]cccc@1[:]
64. print result.group(1) ##返回匹配的字符串中的第一个分组,就是第一个左扩弧和其对应的右扩弧中的所有包含的所有内容. 1]aaaa[2]bbbb[3]cccc@1[:
65. print result.group(2) ##aaaa[2]bbbb[3]cccc
66. print result.group(3) #最大为3,因为匹配字串里只有3个扩弧, :
67. print result.groups() ###把所有扩弧分组的内容放在一个元组对象中,并返回:('1]aaaa[2]bbbb[3]cccc@1[:', 'aaaa[2]bbbb[3]cccc', ':')
68. else:
69. print result
70.
71.
72. ##几个基本的匹配方式:贪婪与非贪婪
73. str = '[1]aaaa[2]bbbb[3]cccc@1[:]dddd'
74. result = re.search(r'\[.*\]',str)
75. if result:
76. print result.group() ##[1]aaaa[2]bbbb[3]cccc@1[:]
77. else:
78. print result
79.
80. str = '[1]aaaa[2]bbbb[3]cccc@1[:]dddd'
81. result = re.search(r'\[.*?\]',str) ###用一个?来控制贪婪
82. if result:
83. print result.group() ##[1]
84. else:
85. print result
86.
87.
88. ##其它的基本匹配和所有的语言都一样,通用的,除了一些高级的用法,不过可以参考官方手册中的样例,如果有需要的话
89.
90.
91.if __name__ == '__main__':
92. regex()

http://blog.csdn.net/five3/article/details/7068594

最近用到了几个标识的参数,比如:忽略大小写,多行搜索等。这里补充一下:

有哪些标识可以使用?

  • re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
  • re.M(re.MULTILINE):  多行模式,改变'^'和'$'的行为(参见上图)
  • re.S(re.DOTALL):  点任意匹配模式,改变'.'的行为,设置后可以匹配\n
  • re.L(re.LOCALE):  使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
  • re.U(re.UNICODE):  使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
  • re.X(re.VERBOSE):  详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。

哪些函数支持这些标识?

  • re.compile(pat, string, flag=0)
  • re.findall(pat, string, flag=0)
  • re.match(pat, string, flag=0)
  • re.search(pat, string, flag=0)
其中flag就是使用标识的地方,可以替换为上述的标识,如果要使用多个标识,则格式为:re.I|re.M|re.S|...
 
这里要注意说明的是:re.M多行只能影响^和$匹配,不会影响跨行的内容匹配,比如:
 
01.str1 = "ab12\nbdc"
02.pat1 = "^a.*2$"
03.pat2 = "a.*d"
04.pat3 = "^a.*c$"
05.print re.match(pat1, str1) ##None,因为没有使用多行,所以第一行的结尾为'\n'而不是‘2’
06.print `re.match(pat1, str1, re.M).group()` ###返回 'ab12',因为使用了多行,所以第一行可以匹配出结果
07.##对于跨行的内容进行匹配时,re.M不能生效
08.print re.match(pat2, str1, re.M) ##None,虽然使用了多行,但是仍匹配不成功,因为多行标识只影响行的开头和结尾标识,在其它匹配中不起作用。
09.##跨行的内容进行匹配时使用,re.S,
10.print `re.match(pat2, str1, re.S).group()` ###返回 'ab12\nbd',使用了re.S,则‘.’可以匹配包含'\n'在内的任意字符,所以可以匹配成功
11.print `re.match(pat3, str1, re.S).group()` ###返回 'ab12\nbdc',使用了re.S,则没有换行的概念,所以整个字符串作为1行来匹配

python re 正则表达式[转]的更多相关文章

  1. [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】

    [python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...

  2. Python 进阶 - 正则表达式

    1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...

  3. python study - 正则表达式

    第 7 章 正则表达式 7.1. 概览 7.2. 个案研究:街道地址 7.3. 个案研究:罗马字母 7.3.1. 校验千位数 7.3.2. 校验百位数 7.4. 使用 {n,m} 语法 7.4.1. ...

  4. python使用正则表达式文本替换

    2D客户端编程从某种意义上来讲就是素材组织,所以,图片素材组织经常需要批量处理,python一定是最佳选择,不管是win/linux/mac都有一个简单的运行环境 举两个应用场景: 如果不是在某个文件 ...

  5. python的正则表达式 re

    python的正则表达式 re 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以是Unicode字符,这点不用担心,python会处理地和Ascii字符一 ...

  6. Python之正则表达式(re模块)

    本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 正则表达式(Regluar Expressions)又称规则 ...

  7. Python:正则表达式详解

    正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能 ...

  8. 【Python】正则表达式纯代码极简教程

    <Python3正则表达式>文字版详细教程链接:https://www.cnblogs.com/leejack/p/9189796.html ''' 内容:Python3正则表达式 日期: ...

  9. 【Python】正则表达式简单教程

    说明:本文主要是根据廖雪峰网站的正则表达式教程学习,并根据需要做了少许修改,此处记录下来以备后续查看. <Python正则表达式纯代码极简教程>链接:https://www.cnblogs ...

  10. 【转】Python之正则表达式(re模块)

    [转]Python之正则表达式(re模块) 本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 参考文档 提示: ...

随机推荐

  1. 二维码zxing源码分析(二)decode部分

           在上一篇博客中分析了zxing怎么打开摄像头,并且扫描结果,那么扫描之后的数据呢,是不是就要解析了呢,那我们看一下zxing怎么解析这个数据的.       上一篇博客地址ZXING源码 ...

  2. 让项目管理理论“落地”——读《IT项目经理成长手记》有感

    最近利用业余时间阅读了一本好书--<IT项目经理成长手记>(潘东.韩秋泉著).本书的两位作者是神州数码(中国本土最大的整合IT服务提供商)的高管,在书中他们介绍了神州数码在IT项目管理领域 ...

  3. 在rdlc 中 显示成 yyyy年MM月dd日

    在rdlc 中  显示成  yyyy年MM月dd日, 采用: =First(Format(Fields!添加时间.Value,"yyyy年MM月dd日")  )

  4. Javascript之拖拽库

    在手机上运行触屏拖动时,我发现页面并没有反应,服务器端执行javascript在手机端与电脑端不能“相同式”实现(电脑端运行正常,而手机端不一样),这是为甚么呢? 首先,我们都知道javascript ...

  5. 20141113--SQL 事务

    ---------------------触发器----------------------------- --触发器本质上还是一个存储过程,trigger --只不过不是通过exec调用执行,而是通 ...

  6. php面向对象的多态

    多态是指使用类的上下文来重新定义或改变类的性质或行为,或者说接口的多种不同的实现方式即为多态.把不同的子类对象都当成父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需要 ...

  7. 10款经典的web前端特效的预览及源码

    1.CSS3响应式导航菜单 今天我给大家介绍一下如何使用纯CSS来实现的一个响应式导航菜单,我们使用的是HTML5+CSS3技术,当浏览器窗口变小或者使用手机浏览器访问的时候,原本横条菜单会收缩成一个 ...

  8. struts2<s:property />标签

    struts2的<property />标签是输出标签 其value属性是指定输出的内容,如果value属性没有写出来,则默认输出对象栈栈顶的元素. 例如,我们在对象栈中添加一个Perso ...

  9. OpenGL第8,9讲小结

    这两节,透明度和物体的3D运动,主要集中在第9讲,因为第9讲也用到了通过Alpha值来调整透明度的地方. 因为要模拟星星,所以要创建的四边形需要很多,例子中创建了50个正方形.因为每个星星的属性都差不 ...

  10. jacob 给word加印的功能

    花了两天时间,参考了一些资料,总算是处理好了这样一个技术点. 关键的心得如下: 使用jacob,重点不是jacob本身,而是office的一些API资料.比如需要知道光标的移动, 包括上下左右的mov ...