python的正则表达式模块re
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import re match_object = re. compile (r"") result = re.match(match_object, "resource string" ) result = re.search(match_object, "resource string" ) result = re.findall(match_object, "resource string" ) # 注意区别 match_object.match( "resource string" ).group() match_object.search( "resource string" ).group() match_object.findall( "resource string" ) #上下两种方式任选一种,findall是返回列表 print result.group() |
match()与search()的区别:
match是从源字符串的头部开始,仅当从第一个字符开始匹配成功,才能从字符串中匹配到目标字符串
search是从源字符串任意位置开始匹配
match和search的共同点是一旦匹配成功就返回,因而只会从源字符串中成功匹配一个目标字符串
findall 是将源字符串中的所有匹配的目标字符串,以列表的形式返回
match_object=re.compile(r"") # r 表示原字符串,比如存在""字符时,""不再表示转义的意思,而是 保持本身作为一个普通字符串的含义
""用在字符串中的意思是转义,例如"\n"不再表示换行符,而是普通字符" "
match_object=re.compile(r"")
匹配目标,正则表达式定义:
"d{}" "d"匹配数字,"{}"表示匹配的个数,{5}匹配5个,{1,}至少匹配1个,{3,8}匹配3至8个;
"^" 以什么开始
"$" 以什么结束
"[0-9a-z]" 匹配[]中包含的一个字符
"[^0-9]" 表示匹配非数字的字符串,"^"用在[]里面不再表示以什么开始,而是表示非
"你|我|他" "|"表示"或"的意思
"?" 表示匹配次数要么为0,要么为1
"*" 表示匹配任一次数,即是0次或0次以上
"+"表示至少匹配一次
"*?" 表示非贪婪匹配 即是尽可能少的匹配
1
2
3
4
|
p = re. compile (r 'woyouy*?' ) result = re.match(p, 'woyouyyyyyyy' ) print result.group() woyou |
"." 通配符,可以表示除换行以外的所有字符,如果加上re.DOTALL,使"."什么都可以匹配,还有re.IGNORECASE,re.VERBOSE
re.VERBOSE 可以排除注释和空白字符
p = re.compile(r'good.haha', re.DOTALL) result = re.findall(p, 'good haha') print result ['good haha'] p = re.compile(r'good.haha', re.IGNORECASE | re.DOTALL) result = re.findall(p, 'GOOD HahA') print result ['GOOD HahA'] p = re.compile(r''' w+. # asdf w+''' #12 ,re.IGNORECASE | re.DOTALL | re.VERBOSE) result = re.findall(p, 'GOOD HahA') print result ['GOOD HahA']
"w" 表示匹配单词,它是包括数字的
"s" 表示匹配空白/换行/制表符
分割字符串:
1
2
3
4
|
p = re. compile (r 'd+' ) result = re.split(p, 'tom32jerry456haha' ) print result [ 'tom' , 'jerry' , 'haha' ] |
替换字符串:
1
2
3
4
|
p = re. compile (r 'd+' ) result = re.sub(p, 'replace' , 'tom32jerry456haha' ) prinr result tomreplacejerryreplacehaha |