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>################################‘














































本文出自 “浪淘沙” 博客,谢绝转载!

Python 之re模块,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。