美文网首页
Python正则表达式

Python正则表达式

作者: 敢梦敢当 | 来源:发表于2017-07-27 10:46 被阅读0次

    <h1><strong>一 . 正则表达式中常用的字符含义<strong><h1>
    <h1><strong>二 . re模块中常用的功能函数<strong><h1>

    <h2>一 . 正则表达式中常用的字符含义<h2>
    下面是Python中正则表达式的一些匹配规则,图片资料来自CSDN

    image.png

    这里需要强调一下反斜杠\的作用:

    1 反斜杠后边跟元字符去除特殊功能;(即将特殊字符转义成普通字符)
    2 反斜杠后边跟普通字符实现特殊功能;(即预定义字符)
    3 引用序号对应的字组所匹配的字符串。

    <h1>>二 . re模块中常用的功能函数<h1>
    (1)re.match(pattern, string[, flags])

    这个方法将会从string(我们要匹配的字符串)的开头开始,尝试匹配pattern,一直向后匹配,如果遇到无法匹配的字符,立即返回None,如果匹配未结束已经到达string的末尾,也会返回None。两个结果均表示匹配失败,否则匹配pattern成功,同时匹配终止,不再对string向后匹配。下面我们通过一个例子理解一下

    # -*- coding: utf-8 -*-
     
    #导入re模块
    import re
     
    # 将正则表达式编译成Pattern对象,注意hello前面的r的意思是“原生字符串”
    pattern = re.compile(r'hello')
     
    # 使用re.match匹配文本,获得匹配结果,无法匹配时将返回None
    result1 = re.match(pattern,'hello')
    result2 = re.match(pattern,'helloo CQC!')
    result3 = re.match(pattern,'helo CQC!')
    result4 = re.match(pattern,'hello CQC!')
     
    #如果1匹配成功
    if result1:
        # 使用Match获得分组信息
        print result1.group()
    else:
        print '1匹配失败!'
     
     
    #如果2匹配成功
    if result2:
        # 使用Match获得分组信息
        print result2.group()
    else:
        print '2匹配失败!'
     
     
    #如果3匹配成功
    if result3:
        # 使用Match获得分组信息
        print result3.group()
    else:
        print '3匹配失败!'
     
    #如果4匹配成功
    if result4:
        # 使用Match获得分组信息
        print result4.group()
    else:
        print '4匹配失败!'
    

    结果

    hello
    hello
    3匹配失败!
    hello
    

    匹配分析

    1.第一个匹配,pattern正则表达式为’hello’,我们匹配的目标字符串string也为hello,从头至尾完全匹配,匹配成功。

    2.第二个匹配,string为helloo CQC,从string头开始匹配pattern完全可以匹配,pattern匹配结束,同时匹配终止,后面的o CQC不再匹配,返回匹配成功的信息。

    3.第三个匹配,string为helo CQC,从string头开始匹配pattern,发现到 ‘o’ 时无法完成匹配,匹配终止,返回None

    4.第四个匹配,同第二个匹配原理,即使遇到了空格符也不会受影响。

    我们还看到最后打印出了result.group(),这个是什么意思呢?下面我们说一下关于match对象的的属性和方法
    Match对象是一次匹配的结果,包含了很多关于此次匹配的信息,可以使用Match提供的可读属性或方法来获取这些信息。

    (2)re.search(pattern, string[, flags])

    search方法与match方法极其类似,区别在于match()函数只检测re是不是在string的开始位置匹配,search()会扫描整个string查找匹配,match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回None。同样,search方法的返回对象同样match()返回对象的方法和属性。我们用一个例子感受一下

    import re
     
    # 将正则表达式编译成Pattern对象
    pattern = re.compile(r'world')
    # 使用search()查找匹配的子串,不存在能匹配的子串时将返回None
    # 这个例子中使用match()无法成功匹配
    match = re.search(pattern,'hello world!')
    if match:
        # 使用Match获得分组信息
        print match.group()
    ### 输出 ###
    # world
    

    (3)re.split(pattern, string[, maxsplit])

    按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。我们通过下面的例子感受一下。

     import re
    pattern = re.compile(r'\d+')
    print re.split(pattern,'one1two2three3four4')
     
    ### 输出 ###
    # ['one', 'two', 'three', 'four', '']
    

    (4)re.findall(pattern, string[, flags])

    搜索string,以列表形式返回全部能匹配的子串。我们通过这个例子来感受一下

     import re
    pattern = re.compile(r'\d+')
    print re.findall(pattern,'one1two2three3four4')
     
    ### 输出 ###
    # ['1', '2', '3', '4']
    

    (5)re.finditer(pattern, string[, flags])

    搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。我们通过下面的例子来感受一下

    import re
    pattern = re.compile(r'\d+')
    for m in re.finditer(pattern,'one1two2three3four4'):
        print m.group(),
     
    ### 输出 ###
    # 1 2 3 4
    

    (6)re.sub(pattern, repl, string[, count])

    使用repl替换string中每一个匹配的子串后返回替换后的字符串。
    当repl是一个字符串时,可以使用\id或\g、\g引用分组,但不能使用编号0。
    当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。
    count用于指定最多替换次数,不指定时全部替换。

     import re
    pattern = re.compile(r'(\w+) (\w+)')
    s = 'i say, hello world!'
     
    print re.sub(pattern,r'\2 \1', s)
     
    def func(m):
        return m.group(1).title() + ' ' + m.group(2).title()
     
    print re.sub(pattern,func, s)
     
    ### output ###
    # say i, world hello!
    # I Say, Hello World!
    

    (7)re.subn(pattern, repl, string[, count])

    返回 (sub(repl, string[, count]), 替换次数)。

     import re
    pattern = re.compile(r'(\w+) (\w+)')
    s = 'i say, hello world!'
     
    print re.subn(pattern,r'\2 \1', s)
     
    def func(m):
        return m.group(1).title() + ' ' + m.group(2).title()
     
    print re.subn(pattern,func, s)
     
    ### output ###
    # ('say i, world hello!', 2)
    # ('I Say, Hello World!', 2)
    

    相关文章

      网友评论

          本文标题:Python正则表达式

          本文链接:https://www.haomeiwen.com/subject/esxzkxtx.html