1.什么是re
正则表达式一门相对通用的语言,在python中也有对正则表达式的支持,那就是的内置re模块。正则表达式就是一系列的规则去匹配字符串然后进行相应的操作,这些规则网上一搜一大片,而re则是运用正则表达式来提供一系列的功能强大的接口让我们来调用。通常我们在对日志文件进行操作的时候会对正则表达式运用的比较多来得到我们希望得到的数据。
2.python中的转义符
正则表达式中通常用反斜杠'\'来代表转义,'\d'代表数字等,但是python本身也是通过反斜杠'\'来表示转义,所以就和正则表达式中的相冲突了,所以在python的re中两个反斜杠才能表示正则表达式中的一个,我们在正则表达式中要匹配一个反斜杠字符的时候就必须要写两个反斜杠,所以如果我们要匹配一个反斜杠那么就必须在re中写四个反斜杠,这是一个相当麻烦且容易出错的地方。
python中提供了原始字符串raw,一个以r开头的字符串表示这个是原始字符串,它就不会对特殊字符进行解析,比如反斜杠'\'就表示一个字符而不是转义符。所以在re中我们经常使用这种原始字符串。
3.re的使用
python通过re模块提供对正则表达式的支持,使用re模块一般是先将正则表达式的字符串形式编译成Pattern对象,然后用Pattern对象来处理文本得到一个匹配的结果,也就是一个Match对象,最后通过Match得到我们的信息并进行操作。
[learnpython@localhost learn]$ python
Python 2.6.6 (r266:84292, Jan 22 2014, 09:42:36)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> help(re.compile)
Help on function compile in module re:
compile(pattern, flags=0)
Compile a regular expression pattern, returning a pattern object.
(END)
通过help可以看到compile方法的介绍,返回一个pattern对象,但是却没有对第二个参数flags进行介绍。第二个参数flags是匹配模式,可以使用按位或'|'表示同时生效,也可以在正则表达式字符串中指定。Pattern对象是不能直接实例化的,只能通过compile方法得到。匹配模式有:
1).re.I(re.IGNORECASE): 忽略大小写
2).re.M(MULTILINE): 多行模式,改变'^'和'$'的行为
3).re.S(DOTALL): 点任意匹配模式,改变'.'的行为
4).re.L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
5).re.U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
6).re.X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释
也可以直接将正则表达式字符串当做参数传进方法,就不用写一行compile代码,这样其实还是会将其编译成Pattern对象再匹配。
import re
pattern = re.compile(r're')
pattern.match('This is re module of python')
re.compile(r're', 'This is re module of python')
# 以上两种方式是一样的
# 以下两种方式是一样的
pattern1 = re.compile(r&