元字符:

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

>>> 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. HUST软工1506班第2周作业成绩公布

    说明 本次公布的成绩对应的作业为: 第2周个人作业:WordCount编码和测试 如果同学对作业成绩存在异议,在成绩公布的72小时内(截止日期4月26日0点)可以进行申诉,方式如下: 毕博平台的第二周 ...

  2. 大前端涉猎之前后端交互总结2:使用PHP进行表单数据上传与更新

    1:使用PHP进行表单上传 1.1 form表单的数据收集 HTML页面: 代码解释:核心模块是form的属性: --提交方式 :  method="post" --指定 name ...

  3. 阿里云vsftp安装和简单的配置

    1.系统环境 [root@jie ~]# cat /etc/redhat-release CentOS release 6.8 (Final) [root@jie ~]# [root@jie ~]# ...

  4. 7z文件格式及其源码的分析(五)

    这是7z文件格式及其源码的分析系列的第五篇. 上一篇讲到了7z文件压缩流程.最近太忙了,好久没更新,都快忘了写到哪了.:) 这一篇就说说7z文件的尾头的生成方式吧. 上一篇已经讲了尾header的结构 ...

  5. Split 之特殊用法

    java中split()特殊符号"." "|" "*" "\" "]"   关于点的问题是用stri ...

  6. ref和out params

    ref和out都对函数参数采用引用传递形式——不管是值类型参数还是引用类型参数,并且定义函数和调用函数时都必须显示生命该参数为 ref/out形式.两者都可以使函数传回多个结果. ref 类似于 PH ...

  7. python学习之路 四 :文件处理

    本节重点 掌握文件的读.写.修改方法 掌握文件的处理模式的区别 一.文件读取 ​    ​1.读取全部内容 # 一次性读取文件 f = open("test.txt",'r',en ...

  8. PT, BPT, VCM

    - VCM可以理解为BPT与PPM之间的MIS,并没有比BPT效果好很多 - BPT, VCM这类算法的主要作用是加快caustics的收敛,对indirect diffuse没有很明显的加速 - i ...

  9. js webstrom中svn的配置及使用

    js  webstorm中svn的配置及使用 一.webstorm配置svn: 1.在webstorm工具中找到file(文件)-setting(设置)菜单按钮: 2.在左边菜单中找到plus(插件) ...

  10. TiDB和MongoDB分片集群架构比较

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近阅读了TiDB源码的说明文档,跟MongoDB的分片集群做了下简单对比. 首先展示TiDB的整体架构 M ...