元字符:

*  星号   它指定前一个字符可以被匹配零次或更多次

>>> re.match('a[bcd]*b', 'abcbdabcd').group()
'abcb'
>>> re.match('a[bcd]*b', 'abcbdbcd').group()
'abcbdb'
>>>

匹配a和b之间的字符,如果有,那么继续直到没有为止。所以它是贪婪匹配。

如果a和b之间有字符,但是不是bcd中的任意一个那么将会停止,取到上次匹配的结果。

+  加号   指定前边的字符一次或者更多次。区别于 * 的是,至少需要一次。

>>> re.match('c+t', 'ctct').group()
'ct'
>>> re.match('c+t', 'tct').group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>>

+  是非贪婪匹配。只要满足条件找到一个就结束。

?  问号   匹配一次或零次  可以认为它用于标识某事物是可选的。例如:home-?brew 匹配 "homebrew" 或 "home-brew"。

>>> re.match('www-?mmm', 'www-mmm').group()
'www-mmm'
>>> re.match('www-?mmm', 'wwwmmm').group()
'wwwmmm'
>>>

可以看到有无 - 减号都可以

最复杂的重复限定符是 {m,n}(注意m,n之间不能有空格),其中 m 和 n 是十进制整数。

该限定符的意思是至少有 m 个重复,至多到 n 个重复。

举个例子,a/{1,3}b 将匹配 "a/b","a//b" 和 "a///b"。它不能匹配 "ab" 因为没有斜杠,也不能匹配 "a////b" ,因为有四个。

>>> re.match('a/{1,3}b', 'a/b').group()      #一个斜杠
'a/b'
>>> re.match('a/{1,3}b', 'ab').group() #没有斜杠
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> re.match('a/{1,3}b', 'a////b').group() #四个斜杠
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>>

细心的读者也许注意到其他三个限定符都可以用这样方式来表示。

{0,}  等同于 *,{1,}  等同于 +,而 {0,1} 则与 ? 相同。

如果可以的话,最好使用 *,+,或?。很简单因为它们更短也更容易懂。

.    点号    匹配任何除了换行以外的字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配换行。

系统预设特殊字符:

\d 匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。

分组:

>>> re.match('(a(b(c)))d', 'abcd').group()
'abcd'
>>> re.match('(a(b(c)))d', 'abcd').group(0)
'abcd'
>>> re.match('(a(b(c)))d', 'abcd').group(1)
'abc'
>>> re.match('(a(b(c)))d', 'abcd').group(2)
'bc'
>>> re.match('(a(b(c)))d', 'abcd').group(3)
'c'
>>>

我们可以看出,这是典型的剥洋葱模式。从外层开始,一层一层向内。最内层的分组将依次被放在从索引为0开始的一个_sre.SRE_Match object中。

 

python正则表达式记录的更多相关文章

  1. Python正则表达式学习记录

    常用的命令: http://www.runoob.com/python/python-reg-expressions.html 使用中相关注意问题: 1. 中括号里的表示从N到M需要用横线‘-’, 而 ...

  2. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  3. Python正则表达式Regular Expression基本用法

    资料来源:http://blog.csdn.net/whycadi/article/details/2011046   直接从网上资料转载过来,作为自己的参考.这个写的很清楚.先拿来看看. 1.正则表 ...

  4. python 正则表达式Re

    Python正则表达式指南这篇文章很好,推荐阅读. 本文则是简单记录下我自己学习Re的笔记, 环境是python3.5. 1.简单的Re语法 ^ 匹配字符串开始位置. $ 匹配字符串结束位置. \b ...

  5. 玩弄 python 正则表达式

    这里记录一个我常用的模型,每次久了不使用正则就会忘记. 记得最好玩的一句关于正则表达式的话就是 当你想到一件事情可以用正则表达式解决的时候 现在你就面临了两个问题了. python里面使用了re模块对 ...

  6. Python学习记录:括号配对检测问题

    Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...

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

    一. 引言 在<第11.2节 Python 正则表达式支持函数概览>介绍了re模块的主要函数,在<第11.3节 Python正则表达式搜索支持函数search.match.fullm ...

  8. Python正则表达式处理中的匹配对象是什么?

    老猿才开始学习正则表达式处理时,对于搜索返回的匹配对象这个名词不是很理解,因此在前阶段<第11.3节 Python正则表达式搜索支持函数search.match.fullmatch.findal ...

  9. Python正则表达式使用小记

    最近做Python课实验发现正则表达式和它在py中的的标准库re有很多能多琢磨一下的点,遂决定写成一篇小记,以后想复习能再来看看. 名词 因为不同文献书籍对正则表达式的描述有差别,我在这里列出一下我已 ...

随机推荐

  1. JMS 之 Active MQ的安全机制

    一.认证 认证(Authentication):验证某个实体或者用户是否有权限访问受保护资源. MQ提供两种插件用于权限认证:(一).Simple authentication plug-in:直接把 ...

  2. WCF和ASP.NET Web API在应用上的选择(转)

    出处:http://www.cnblogs.com/shanyou/archive/2012/09/26/2704814.html 在最近发布的Visual Studio 2012及.NET 4.5中 ...

  3. find查找到并删除,替换指定文件

    1.删除/root/work/tomcat/logs/目录下,所有目录. find /root/work/tomcat/logs/* -type d | xargs rm -rf 顺便列一下find的 ...

  4. linux 删除文件,某个文件例外

    # shopt -s extglob      (打开extglob模式) # rm -fr !(file1)

  5. 'for each' statements are only available if source level is 5.0

    在用foreach的时候,出现以下错误: 错误:Syntax error, 'for each' statements are only available if source level is 5. ...

  6. HTTP Debugger Pro使用教程

    相关链接:HTTP Debugger Pro安装教程 1.设置过滤器,只监控指定地址的数据   选择仅显示匹配的记录   输入监控地址   控件传输的数据   服务器返回的数据

  7. android在更新ADT以后报java.lang.NoClassDefFound的解决办法

    Android不是很熟.从网上找到了想要的代码后兴高采烈的导入workspace中,直接开Run. but在真机的时候Console.LogCat下都没显示什么有用的东西,就是写NDK编译完Nativ ...

  8. c# MSMQ 消息队列

    转  消息队列 http://www.cnblogs.com/anbylau2130/p/3469512.html

  9. 19、Semantic-UI之图片的动画效果

      在Semantic-UI中定义了很多图片动画效果,可以直接使用. 示例:定义图片动画 <!DOCTYPE html> <html lang="en"> ...

  10. Verilog MIPS32 CPU(九)-- 顶层文件

    `timescale 1ns / 1ps /////////////////////////////////////////////////////////////////////////////// ...