Python学习笔记——正则表达式入门

# 本文对正则知识不作详细解释,仅做入门级的正则知识目录。html

 

  正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用作个HTML解析器,正则的优点表现得淋漓尽致。题外话很少讲,直接上干货:python

1. 元字符:正则表达式

   

  与之对应的还有反义字符,大部分为小写字母变大写,例如\D表示匹配非数字的字符。学习

2. 重复(即匹配变长的字符串):spa

  元字符可匹配单一的字符类型,若想匹配长度未知或长度限定的字符串须要在后边加上限定符。.net

  

3. 范围与分组:code

  有时元字符并不能知足匹配字符的需求,这时就须要[]来圈定匹配范围,例如要匹配一个只带有a,s,d,f的单词,能够用\b[asdf]\b;正则里面还有小括号用来表示分组,好比你想重复某几个字符,就可使用分组,例如(\d.\d){1,3}表示匹配小括号里的重复内容一到三次。此外,小括号还能够用来后向引用等,此处不记。htm

4. 零宽断言:对象

  零宽断言主要用来查找在某些断言(指定内容)以前或以后的内容,例如(?=exp)匹配表达式exp前面出现的内容(不匹配exp),(?<=exp)匹配表达式exp后面出现的内容,还有负向零宽断言等此处不记。blog

5. 贪婪与懒惰:

  当正则表达式中包含能接受重复的限定符时,一般的行为是(在使整个表达式能获得匹配的前提下)匹配尽量多的字符,即贪婪匹配。如表达式a.*b,搜索aabab的话,它会匹配整个字符串aabab。而懒惰匹配会匹配尽量少的字符串,只须要在限定符后面加一个?,例如a.*?b会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。

6. Python的re模块:

  python 提供re模块,提供正则的全部功能。下面只记两个方法和一个注意的地方。

  6.1 match方法:

    match()方法判断是否匹配,若是匹配成功,返回一个Match对象,不然返回None

1 >>> import re
2 >>> re.match(r'^\d{3}\-\d{3,8}$', '010-12345')
3 <_sre.SRE_Match object at 0x1026e18b8>
4 >>> re.match(r'^\d{3}\-\d{3,8}$', '010 12345')
5 >>>

    若是正则表达式中定义了组,就能够在Match对象上用group()方法提取出子串来。注意到group(0)永远是原始字符串,group(1)group(2)……表示第一、二、……个子串。使用groups()方法还能够获得全部子串。

  6.2 split方法:

    split()方法可切分子串,以下:

1 >>> re.split(r'[\s\,\;]+', 'a,b;; c  d')
2 ['a', 'b', 'c', 'd']

  6.3 关于转义字符:

    python转义字符串也用\表示,因此正则表达式读取时做为字符串出现时会被编译器自动去掉转移字符的\,正则使用时就会出错,因此推荐使用python的 r 前缀。

ps:

  本文是对正则表达式的学习总结,大部分知识来源于网上。下面给出两个我的认为比较好的连接:

  1.http://www.jb51.net/tools/zhengze.html 对正则表达式介绍的比较详细,我的认为要想深刻学习正则表达式仍是买本书比较好。

  2.http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832260566c26442c671fa489ebc6fe85badda25cd000 来自廖雪峰大神的教程,结合python一块儿讲,只是稍微短了一点。

相关文章
相关标签/搜索