规则表达式(Regular Expression, RE),又称做正则表达式,一般用于检索、替换符合指定规则的文本,正则表达式定义的规则,称做模式(Pattern),即正则表达式的做用是从文本中查找到符合模式的文本。在Python中使用正则表达式,须要导入re模块。html
import re
对于简单的正则表达式,请参考文档:正则表达式 第一篇:元字符python
从帮助文档中能够看到,re模块导出的函数主要是:match、search、sub、split、findall、finditer、compile和escape,这些函数中,一般有三个参数,string:用于匹配的文本,pattern:正则表达式的模式,flags:匹配选项,flags 默认为0 ,不使用任何模式。正则表达式
正则表达式的flag主要有:函数
正则表达式能够同时使用多个flag,在 Python 里面使用按位或运算符 | 同时添加多个fag,例如 re.compile('', re.I|re.M|re.S)spa
1,编译和转义code
compile函数用于编译一个正则表达式模块,便于复用,orm
re.compile(pattern, flags=0)
re.escape(pattern)
转义函数的做用,和r'pattern'的做用相同,便于编写正则表达式,避免出现过多的转义字符。htm
print( re.escape(".+\d123")) # output> \.\+\\d123
2,拆分对象
把一个字符串,按照正则表达式匹配的结果进行拆分blog
text='foo bar\t baz \tqux' re.split('\s+',text)
或者,先编译成正则表达式对象,而后对字符串进行拆分:
regex=re.compile('\s+') text='foo bar\t baz \tqux' regex.split(text)
3,匹配第一个
正则表达式有两个匹配函数,match和search函数,这两个函数的相同之处:返回第一个匹配的对象,一旦匹配成功,就再也不继续查找,返回一个SRE_Match 对象;若是找不到,则返回None。
re.match(pattern, string, flags=0)
re.search(pattern, string, flags=0)
不一样之处在于:re.match函数从字符串的开头查找,若是开头不匹配,则再也不继续查找,返回None;而re.search匹配整个字符串,直到找到第一个匹配(注意:仅仅是第一个)或者没有匹配到任何文本。
4,匹配全部
re.findall在字符串中找到匹配正则表达式的全部文本,做为一个列表返回,若是没有找到匹配,则返回空列表:
re.findall(pattern, string, flags=0)
re.finditer在字符串中找到匹配正则表达式所的全部文本,并把它们做为一个迭代器返回:
re.finditer(pattern, string, flags=0)
5,替换匹配的字符
把正则表达式 pattern 匹配到的字符串替换为 repl 指定的字符串, 参数 count 用于指定最大替换次数,默认值是o,表示无限大。
re.sub(pattern, repl, string, count=0, flags=0)
替换函数能够把文本的标点符号和HTML标签去掉。
re模块内置的对象有Pattern对象和Match对象
1,Pattern对象
Pattern对象是一个编译好的正则表达式,使用re.compile()进行构造,经过Pattern提供的一系列方法能够对文本进行匹配查找。
Pattern提供了几个可读属性用于获取表达式的相关信息:
2,Match对象
Match对象存储 re.match() 或 re.search()的结果,一般有一个值为True的boolean值。
Match对象的属性:
Match对象的方法:
1,删除文本中的标点符号
remove_punct=re.compile('[%s]' % re.escape(string.punctuation)) no_punct = remove_punct.sub(u'', text)
2,删除文本中的HTML标签
# use sub to replace the tags pat = re.compile('<[^>]+>', re.S) pat.sub('', text) #combine the normal text pat = re.compile('>(.*?)<') ''.join(pat.findall(text))
参考文档: