Python 之re模块
re.finditer(pattern, string, flags=0) #与findall函数一样,但是返回的是迭代器对象
shell脚本学好需要熟练掌握三部分:指令-正则表达式-控制流,可见正则表达式的重要行,同样在python中,正则表达式也是非常重要的一环。
re模块就是python的正则表达式模块。
>>> import re >>> re. re.DEBUG re._MAXCACHE re.__repr__( re.copy_reg re.DOTALL re.__all__ re.__setattr__( re.error( re.I re.__class__( re.__sizeof__( re.escape( re.IGNORECASE re.__delattr__( re.__str__( re.findall( re.L re.__dict__ re.__subclasshook__( re.finditer( re.LOCALE re.__doc__ re.__version__ re.match( re.M re.__file__ re._alphanum re.purge( re.MULTILINE re.__format__( re._cache re.search( re.S re.__getattribute__( re._cache_repl re.split( re.Scanner re.__hash__( re._compile( re.sre_compile re.T re.__init__( re._compile_repl( re.sre_parse re.TEMPLATE re.__name__ re._expand( re.sub( re.U re.__new__( re._pattern_type( re.subn( re.UNICODE re.__package__ re._pickle( re.sys re.VERBOSE re.__reduce__( re._subx( re.template( re.X re.__reduce_ex__( re.compile(
re.compile(pattern, flags=0) #创建一个正则表达式模式对象,可以调用下面的方法。 re.escape(‘string‘) #返回一个字符串,其中的所有非字母数字字符都带有反斜杠
re.findall(pattern, string, flags=0) #返回一个符合模式的字符串列表, >>> re.findall(‘[1-9]‘,‘du1diao3han9‘) [‘1‘, ‘3‘, ‘9‘]
re.match(pattern, string, flags=0) #检查字符串的开口是有与模式匹配,若匹配返回一个对象,否则返回none >>> print re.match(‘z‘,‘s‘) None >>> re.match(‘d‘,‘du diao‘) <_sre.SRE_Match object at 0xb735bbf0>
re.search(pattern, string, flags=0) #在字符串中搜索是否有匹配模式的值 若有,返回一个对象实例,否则返回none <_sre.SRE_Match object at 0xb735bbf0> >>> re.search(‘zhu‘,‘luozhuhao‘) <_sre.SRE_Match object at 0xb7282a30> >>> re.search(‘xzhu‘,‘luozhuhao‘) >>> print re.search(‘xzhu‘,‘luozhuhao‘) None
re.split(pattern, string, maxsplit=0, flags=0) >>> re.split(‘\|‘,‘888|zhu|999‘) [‘888‘, ‘zhu‘, ‘999‘]
re.sub(pattern, repl, string, count=0, flags=0) #用字符串repl替换string中符合模式的字符 >>> re.sub(‘[1-9]‘,‘du juan‘,‘ni ke 9 zhidao 8‘) ‘ni ke du juan zhidao du juan‘
re.sub(pattern, repl, string, count=0, flags=0)#与sub函数一样,但是返回的是一个元组,包括新字符串和替换次数 >>> re.subn(‘[1-9]‘,‘du juan‘,‘ni ke 9 zhidao 8‘) (‘ni ke du juan zhidao du juan‘, 2)
有re.compile():函数编译的正则表达式对象具有以下方法:
>>> r = re.compile(‘the‘) r.findall( r.match( r.search( r.sub( r.finditer( r.scanner( r.split( r.subn( #和上面的函数意义一样,就是参数有些区别
有search()和match()返回的对象具有的方法如下
m.group([group1,group2,...]) #返回匹配值的一个或多个子分组,其中参数指定分组编号或名称,如果未指定分组编号和名称则将返回整个匹配值 m.groups() #返回一个元组,包含与模式中所有分组匹配的文本 何为分组: datapat = re.compile(‘(\d+)/(\d+)/(\d+)‘) 把正则表达式放在小括号中称为分组 从左边数第一个小括号称为group(1) 第二个group(2) 最外面的括号包含整个表达式的称为group(0)
常用的转义码:
\d #一个数字 \D #一个非数字 \s #空白符(制表符,空格,换行符) \S #非空白符 \w #字母数字 \W #非字母数字
常用的锚定码:
^ #字符串或行的开始 $ #字符串会行的结束 \A #字符串的开始 \Z #字符串的结束 \b #一个单词开头或末尾的空串 \B #不在一个单词开头或末尾的空串
常用的重复匹配:
a* #字符a可以出现0个或多个a a+ #字符a至少出现1个 a?#a可以出现0个或1个 贪婪模式与关闭贪婪模式 默认是贪婪模式匹配,即是尽可能多的匹配 ?可以关闭贪婪模式 a*? #a出现0个 a+? #a出现1个 a??#a出现0个
[root@zhu ~]# cat zhu.py #!/usr/bin/python import re def test_patterns(text,patterns=[]): for pattern,desc in patterns: print ‘pattern: %r (%s)\n‘ %(pattern,desc) print ‘%r‘ %text for match in re.finditer(pattern,text): s = match.start() e = match.end() substr = text[s:e] n_backslashes = text[:s].count(‘\\‘) prefix = ‘.‘ * (s + n_backslashes) print ‘%s%r‘ %(prefix,substr) print return test_patterns(‘abbaaabbbbaaaaa‘,[(‘ab*‘,‘a followed by b‘)]) print ‘1>################################‘ test_patterns(‘abbaaabbbbaaaaa‘,[(‘ab+‘,‘a followed by b‘)]) print ‘2>################################‘ test_patterns(‘abbaaabbbbaaaaa‘,[(‘ab?‘,‘a followed by b‘)]) print ‘3>################################‘ test_patterns(‘abbaaabbbbaaaaa‘,[(‘ab*?‘,‘a followed by b‘)]) print ‘4>################################‘ test_patterns(‘abbaaabbbbaaaaa‘,[(‘ab+?‘,‘a followed by b‘)]) print ‘5>################################‘ test_patterns(‘abbaaabbbbaaaaa‘,[(‘ab??‘,‘a followed by b‘)]) print ‘6>################################‘ test_patterns(‘abbaaabbbbaaaaa‘,[(‘ab{2,3}‘,‘a followed by b‘)]) print ‘7>################################‘ test_patterns(‘abbaaabbbbaaaaa‘,[(‘ab{2,3}?‘,‘a followed by b‘)]) print ‘8>################################‘ test_patterns(‘abbaaabbbbaaaaa‘,[(‘ab{3}‘,‘a followed by b‘)]) print ‘9>################################‘ test_patterns(‘abbaaabbbbaaaaa‘,[(‘ab{3}?‘,‘a followed by b‘)]) print ‘1[root@zhu ~]# python zhu.py pattern: ‘ab*‘ (a followed by b) ‘abbaaabbbbaaaaa‘ ‘abb‘ ...‘a‘ ....‘a‘ .....‘abbbb‘ ..........‘a‘ ...........‘a‘ ............‘a‘ .............‘a‘ ..............‘a‘ 1>################################ pattern: ‘ab+‘ (a followed by b) ‘abbaaabbbbaaaaa‘ ‘abb‘ .....‘abbbb‘ 2>################################ pattern: ‘ab?‘ (a followed by b) ‘abbaaabbbbaaaaa‘ ‘ab‘ ...‘a‘ ....‘a‘ .....‘ab‘ ..........‘a‘ ...........‘a‘ ............‘a‘ .............‘a‘ ..............‘a‘ 3>################################ pattern: ‘ab*?‘ (a followed by b) ‘abbaaabbbbaaaaa‘ ‘a‘ ...‘a‘ ....‘a‘ .....‘a‘ ..........‘a‘ ...........‘a‘ ............‘a‘ .............‘a‘ ..............‘a‘ 4>################################ pattern: ‘ab+?‘ (a followed by b) ‘abbaaabbbbaaaaa‘ ‘ab‘ .....‘ab‘ 5>################################ pattern: ‘ab??‘ (a followed by b) ‘abbaaabbbbaaaaa‘ ‘a‘ ...‘a‘ ....‘a‘ .....‘a‘ ..........‘a‘ ...........‘a‘ ............‘a‘ .............‘a‘ ..............‘a‘ 6>################################ pattern: ‘ab{2,3}‘ (a followed by b) ‘abbaaabbbbaaaaa‘ ‘abb‘ .....‘abbb‘ 7>################################ pattern: ‘ab{2,3}?‘ (a followed by b) ‘abbaaabbbbaaaaa‘ ‘abb‘ .....‘abb‘ 8>################################ pattern: ‘ab{3}‘ (a followed by b) ‘abbaaabbbbaaaaa‘ .....‘abbb‘ 9>################################ pattern: ‘ab{3}?‘ (a followed by b) ‘abbaaabbbbaaaaa‘ .....‘abbb‘ 10>################################0>################################‘
本文出自 “浪淘沙” 博客,谢绝转载!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。