摘录:正则表达式(RE)为高级文本模式匹配,以及搜索-代替等功能提供了基础。正则表达式(RE)是一些有字符和特殊符号组成的字符串,它们描述了这些字符和字符的某种重复方式,因策能按某种模式匹配一个有相似特征的字符串的集合,因策能按某模式匹配一系列有相似特征的字符串。
1. 下面是一些最常用的元字符(metacharacters),正是他们赋予了正则表达式强大的功能和灵活性。
Symbols | 说明 | 举例 |
leteral | 匹配字符串的值 | foo |
re1|re2 | 匹配正则表达式re1或re2 | foo|bar |
. | 匹配任何字符(换行符除外) | b.b |
^ | 匹配字符串的开始 | ^Dear |
$ | 匹配字符串的结尾 | /bin/*sh$ |
* | 匹配前面出现的正则表达式零次或多次 | [A-Za-z0-9]* |
+ | 匹配前面出现的正则表达式一次或多次 | [a-z]+\.com |
? | 匹配前面出现的正则表达式零次或一次 | goo+ |
{N} | 匹配前面出现的正则表达式N次 | [0-9]{3} |
{M,N} | 匹配重复出现M次到N次的正则表达式 | [0-9]{5,9} |
[...] | 匹配字符组中出现的任意一个字符 | [aeiou] |
[..x-y..] | 匹配从字符x到y中的任意一个字符 | [0-9],[A-Za-z] |
[^...] | 不匹配此字符集中出现的任何一个字符,包括某一范围的字符(如果此字符集中出现) | [^aeiou],[^A-Za-z0-9_] |
(*|+|?|{})? | 用于上线出现的任何"非贪婪"版本重复匹配次数副号(*,+,?,{}) | .*?[a-z] |
(...) | 匹配封闭括号中正则表达式(RE),并保存为子组 | ([0-9]{3})?, f(oo|u)bar |
\a | 匹配任何数据,和[0-9]一样,(\D是\d的反义:然和非数字符) | data\d+.txt |
\w | 匹配然和数据字母字符,和[A-Za-z0-9]相同(\W是\w的反义) | [A-Za-z_]\w+ |
\s | 配置任何空白符,和[\n\t\r\v\f]相同,(\S是\s的反义) | of\sthe |
\b | 匹配单词边界(\B是\b的反义) | \bThe\b |
\nn | 匹配以保存的子组(请参考上面的正则表达式副号:(...)) | price:\16 |
\c | 逐一匹配特殊字符c(即,取消它的特殊含义,按字面匹配) | \., \\, \* |
2. python处理正则表达式的模块
re模块的函数
compile(pattern, flags=0):对正则表达式pattern进行编译,并返回一个regex对象
re模块的函数和regex对象的方法
match(pattern, string, flags=0):尝试用正则表达式模式pattern匹配字符串string,如果匹配成功,则返回一个匹配对象;否则返回None
search(pattern, string, flags=0):在字符串string中查找正则表达式模式pattern的第一次出现,如果匹配成功,则返回一个匹配对象。否则返回None
findall(pattern, string[, flags]):在字符串string中查找正则表达式模式pattern的所有(非重复)出现:返回一个匹配对象的列表。
finditer(pattern, string[, flags]):和findall()相同,但返回的不是离别而是迭代器:对于每个匹配该迭代器返回一个匹配对象
匹配对象的方法
split(pattern, string, max=0):根据正则表达式pattern中的分隔符吧字符string分割为一个列表,返回成功匹配的列表,最多分割max次
sub(pattern, repl, string, max=0):把字符串string中左右匹配正则表达式pattern的地方替换成字符串rep1,如果max值没有给出,则对所有匹配的地方进行替换
group(num=0):返回全部匹配对象(或指定编号是num的子组)
groups():返回一个包含全部匹配的子组的元组(如果没有匹配成功,就返回一个空元组)
3. 正则表达式示例
>>> import re
>>> data = 'Thu Feb 15 17:46:04 2007::uzifzf@dpyivihw.gov::1171590364-6-8'
>>> patt = '^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)'
>>> m = re.match(patt, data)
>>> m.group()
'Thu'
>>>