python中的正则表达式
一、python中的转义字符
正则表达式使用反斜杠""来表示特殊形式或用于转义字符,这里和python的基本语法有冲突所以用'\\'来表示正则表达式中的""。
二、正则表达式的常见元字符
元字符:是正则表达式中具有特殊含义的转义字符,用来规定位于元字符前面的字符,在目标对象中出现的模式。
. 匹配除换行符以外的任意字符 ^ 匹配字符串的开始 $ 匹配字符串的结束 [] 用来匹配一个指定的字符类别 ? 对于前一个字符字符重复0次到1次 * 对于前一个字符重复0次到无穷次 {} 对于前一个字符重复m次 {m,n} 对前一个字符重复为m到n次 d 匹配数字,相当于[0-9] D 匹配任何非数字字符,相当于[^0-9] s 匹配任意的空白符,相当于[ fv] S 匹配任何非空白字符,相当于[^ fv] w 匹配任何字母数字字符,相当于[a-zA-Z0-9_] W 匹配任何非字母数字字符,相当于[^a-zA-Z0-9_] 匹配单词的开始或结束
三、正则表达式模块导入
3.1、查看正则表达式模块的方法
>>>def(re)
[
'DEBUG'
,
'DOTALL'
,
'I'
,
'IGNORECASE'
,
'L'
,
'LOCALE'
,
'M'
,
'MULTILINE'
,
'S'
,
'Scanner'
,
'T'
,
'TEMPLATE'
,
'U'
,
'UNICODE'
,
'VERBOSE'
,
'X'
,
'_MAXCACHE'
,
'__all__'
,
'__builtins__'
,
'__doc__'
,
'__file__'
,
'__name__'
,
'__package__'
,
'__version__'
,
'_alphanum'
,
'_cache'
,
'_cache_repl'
,
'_compile'
,
'_compile_repl'
,
'_expand'
,
'_pattern_type'
,
'_pickle'
,
'_subx'
,
'compile'
,
'copy_reg'
,
'error'
,
'escape'
,
'findall'
,
'finditer'
,
'match'
,
'purge'
,
'search'
,
'split'
,
'sre_compile'
,
'sre_parse'
,
'sub'
,
'subn'
,
'sys'
,
'template'
]
3.2、导入正则表达式
import re
四、常用的正则表达式处理函数
4.1、re.match
尝试从字符串的开始匹配正则,也就是匹配第一个单词
re.match(pattern, string, flags=0) 第一个参数:规则 第二个参数:表示要匹配的字符串 第三个参数:标致位,用于控制正则表达式的匹配方式
匹配成功re.match方法返回一个匹配对象,否则返回None
我们可以使用group(num)或者groups()匹配对象函数来获取匹配表达式
实例1:
import re print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配
print(re.match('www', 'www.runoob.com')) print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配
结果:
(0, 3)#>=0&&<3
<_sre.SRE_Match object; span=(0, 3), match='www'> None
4.2、search方法
re.search扫描整个字符串并返回第一个成功的匹配
search(pattern, string, flags=0) 第一个参数:规则 第二个参数:表示要匹配的字符串 第三个参数:标致位,用于控制正则表达式的匹配方式
re.search匹配成功返回一个匹配对象,否则返回None
我们可以使用group(num)或者groups()匹配对象函数来获取匹配表达式
实例:
import re print(re.search('www', 'www.runoob.com').span()) # 在起始位置匹配 print(re.search('com', 'www.runoob.com').span()) # 不在起始位置匹配
结果:
(0, 3) (11, 14)
4.3、re.match和re.search的区别
re.match只匹配字符串的开始,如果字符串的开始不符合正则表达式,则匹配失败,函数返回None;re.search匹配整个字符串直接找到第一个匹配的
实例:
import re line = "Cats are smarter than dogs"; matchObj = re.match( r'dogs', line, re.M|re.I) if matchObj: print "match --> matchObj.group() : ", matchObj.group() else: print "No match!!" matchObj = re.search( r'dogs', line, re.M|re.I) if matchObj: print "search --> matchObj.group() : ", matchObj.group() else: print "No match!!"
结果:
No match!! search --> matchObj.group() : dogs
4.4、re.findall
re.findall 在目标字符串中查找符合规则的字符串
findall(pattern, string, flags=0) 第一个参数:规则 第二个参数:目标字符串 但三个参数:后面还可以跟一个规则选择项
实例:
import re print(re.findall(r'abc',"abc kjhqwkhabcednk abc dsd")) print(re.findall(r'(abc)',"abc kjhqwkhabcednk abc dsd")) print(re.findall(r'abc',"abc kjhqwkhabcednk abc dsd"))
print(re.findall(r'[abc]',"abc kjhqwkhabcednk abc dsd"))
结果:
['abc', 'abc', 'abc'] ['abc', 'abc', 'abc'] ['abc', 'abc'] ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']
4.5、re.sub 用于替换字符串的匹配项
sub(pattern, repl, string, count=0) 第一个参数:规则 第二个参数:替换后的字符串 第三个参数:字符串 第四个参数:替换个数。默认为0,表示每个匹配项都替换
例子:
s = "hello python glad to see you" print(re.sub(r's','-',s))#s任意的空白字符 s = "hello python glad to see you" print(re.sub(r's','-',s,3))#s任意的空白字符,3表示替换3次
结果:
hello-python-glad-to-see-you hello-python-glad-to see you
4.6、re.split 用于分割字符串
split(pattern, string, maxsplit=0) 第一个参数:规则 第二个参数:字符串 第三个参数:最大分割字符串,默认为0,表示每个匹配项都分割
实例:
s = "hello python glad to see you" print(re.split(r's',s)) print(re.split(r's.',s)) print(re.split(r's.*',s)) print(re.split(r's',s,3))
结果:
['hello', 'python', 'glad', 'to', 'see', 'you'] ['hello', 'ython', 'lad', 'o', 'ee', 'ou'] ['hello', ''] ['hello', 'python', 'glad', 'to see you']
4.7、re.complie 可以把正则表达式编译成一个正则对象
实例:
r1 = findall('d+',"eqwe132qewqe2545qeqw5654") print(r1) r2 = re.compile('d+') #compile经过编译生成了对象 r3 = r2.findall("eqwe132qewqe2545qeqw5654") print(r3)
结果:
['132','2545','5654'] ['132','2545','5654']