python基础(5)--正则表达式
1,re模块
在python中,正则表达式的模块是RE
2,正则表达式中的特殊字符
符号 含义 re例子
. 匹配任何一个字符(除了NEWLINE) b.b
^ 匹配字符串的开始 ^hello
$ 匹配字符串的结束 /bin/sh$
* 匹配0个或更多的前RE表达式 [A-Za-z0-9]*
+ 匹配1个或多个前面的RE表达式 [a-z]+\.com
? 匹配0个或1个前面的RE表达式 hello?
{N} 匹配N个前面的RE表达式 [0-9]{3}
{M,N} 匹配M到N个前面出现的RE表达式 [0-9]{3,5}
[...] 匹配任何一个单一字符 [abcd]
[...x-y...] 匹配任何一个单一字符从x到y [a-zA-Z]
[^...] 不匹配任何一个单一字符 [^abcd] 非abcd
re1|re2 匹配符合re1和re2的字符串 foo|bar
(...) 匹配括号中的正则表达式并保存为子组 ([0-9]{3})?
其他特殊字符
\d 匹配任何的数字和[0-9]一样
\D 匹配任何非数组和[^0-9]一样
\w 匹配任何数字和字母和[a-zA-Z0-9]一样\W是它的反意 [a-z]\w+
\s 匹配任何空白字符和[ \t\b\r\v\f\n]同,\S是它的反义 of\sthe
\nn 匹配以保存的子组(参考()表达式) price: \16
\A(\Z) 匹配字符串的起始和结束 \AHi
\c 逐一匹配特殊字符c是特殊字符,取消特殊字符的含 \*,\n
\b(\B) 匹配单词边界\B是它的反义 \bThe\b
3,RE模块
3.1 模块中的核心函数
.compile(pattern,flags=0)
编译一个正则表达式pattern到正则表达式对象regex,该对象可以用于以后的match等函数。该函数可能由于flags标记的设置而改变行为,比如使用|来添加一个匹配。
该函数保留正则表达式的对象,以便以后可以重用,这样可以提高效率,例如:
prog = re.compile(pattern)
result = prog.match(string)
相当于调用:
result = prog.match(string)
相当于调用:
result = re.match(pattern, string)
.search(pattern,string, flags=0)
在字符串string 中查找正则表达式模式pattern 的第一次出现,flags 是可选标志符,如果匹配成功,则返回一个匹配对象;否则返回None
.findall(pattern,string[,flags])a 在字符串string 中查找正则表达式模式pattern 的所有(非重复)出现;返回一个匹配对象的列表
.finditer(pattern,string[, flags])b 和findall()相同,但返回的不是列表而是迭代器;对于每个匹配,该迭代器返回一个匹配对象
.split(pattern,string, max=0) 根据正则表达式pattern 中的分隔符把字符string 分割为一个列表,返回成功匹配的列表,最多分割max 次(默认是分割所有匹配的地方)。
.sub(pattern, repl, string, max=0) 把字符串string 中所有匹配正则表达式pattern 的地方替换成字符串repl,如果max 的值没有给出,则对所有匹配的地方进行替换(另外,请参考subn(),它还会返回一个表示替换次数的数值)。
.group(num=0) 返回全部匹配对象(或指定编号是num 的子组)
.groups() 返回一个包含全部匹配的子组的元组(如果没有成功匹配,就返回一个空元组)
4,正则表达式的应用
.编译正则表达式
由于正则表达式在进行模式匹配前,会编译成regex对象。由于正则表达式多次用于匹配,所以在匹配之前最好做预编译。而且模块会对以编译好的对象进行缓存,这样会很大程度上提高性能。