• Python 之re正则模块


    一、正则匹配规则

     二、常用函数

    • match 方法:从起始位置开始查找,一次匹配
    • search 方法:从任何位置开始查找,一次匹配
    • findall 方法:全部匹配,返回列表
    • finditer 方法:全部匹配,返回迭代器
    • split 方法:分割字符串,返回列表
    • sub 方法:替换

    1、match示例

    >>> import re
    >>> pattern = re.compile(r'd+')  # 用于匹配至少一个数字
    
    >>> m = pattern.match('one12twothree34four')  # 查找头部,没有匹配
    >>> print m
    None
    
    >>> m = pattern.match('one12twothree34four', 2, 10) # 从'e'的位置开始匹配,没有匹配
    >>> print m
    None
    
    >>> m = pattern.match('one12twothree34four', 3, 10) # 从'1'的位置开始匹配,正好匹配
    >>> print m                                         # 返回一个 Match 对象
    <_sre.SRE_Match object at 0x10a42aac0>
    
    >>> m.group(0)   # 可省略 0
    '12'
    >>> m.start(0)   # 可省略 0
    3
    >>> m.end(0)     # 可省略 0
    5
    >>> m.span(0)    # 可省略 0
    (3, 5)

    2、search示例

    >>> import re
    >>> pattern = re.compile('d+')
    >>> m = pattern.search('one12twothree34four')  # 这里如果使用 match 方法则不匹配
    >>> m
    <_sre.SRE_Match object at 0x10cc03ac0>
    >>> m.group()
    '12'
    >>> m = pattern.search('one12twothree34four', 10, 30)  # 指定字符串区间
    >>> m
    <_sre.SRE_Match object at 0x10cc03b28>
    >>> m.group()
    '34'
    >>> m.span()
    (13, 15)

    3、findall示例

    import re
    pattern = re.compile(r'd+')   # 查找数字
    
    result1 = pattern.findall('hello 123456 789')
    result2 = pattern.findall('one1two2three3four4', 0, 10)
    
    print result1
    print result2

    结果

    ['123456', '789']
    ['1', '2']

    4、finditer示例

    import re
    pattern = re.compile(r'd+')
    
    result_iter1 = pattern.finditer('hello 123456 789')
    result_iter2 = pattern.finditer('one1two2three3four4', 0, 10)
    
    print type(result_iter1)
    print type(result_iter2)
    
    print 'result1...'
    for m1 in result_iter1:   # m1 是 Match 对象
        print 'matching string: {}, position: {}'.format(m1.group(), m1.span())
    
    print 'result2...'
    for m2 in result_iter2:
        print 'matching string: {}, position: {}'.format(m2.group(), m2.span())

    结果

    <type 'callable-iterator'>
    <type 'callable-iterator'>
    result1...
    matching string: 123456, position: (6, 12)
    matching string: 789, position: (13, 16)
    result2...
    matching string: 1, position: (3, 4)
    matching string: 2, position: (7, 8)

    5、split示例

    import re
    p = re.compile(r'[s\,;]+')
    print p.split('a,b;; c   d')

    结果

    ['a', 'b', 'c', 'd']

    6、sub示例

    import re
    p = re.compile(r'(w+) (w+)') # w = [A-Za-z0-9]
    s = 'hello 123, hello 456'
    
    print p.sub(r'hello world', s)  # 使用 'hello world' 替换 'hello 123' 和 'hello 456'
    print p.sub(r'2 1', s)        # 引用分组
    
    def func(m):
        return 'hi' + ' ' + m.group(2)
    
    print p.sub(func, s)
    print p.sub(func, s, 1)         # 最多替换一次

    结果

    hello world, hello world
    123 hello, 456 hello
    hi 123, hi 456
    hi 123, hello 456
  • 相关阅读:
    商贸通帐套隐藏方法
    固定资产打开提示:上年度数据未结转!
    ZOJ 2432 Greatest Common Increasing Subsequence
    POJ 1080 Human Gene Functions
    POJ 1088 滑雪
    POJ 1141 Brackets Sequence
    POJ 1050 To the Max
    HDOJ 1029 Ignatius and the Princess IV
    POJ 2247 Humble Numbers
    HDOJ 1181 变形课
  • 原文地址:https://www.cnblogs.com/yang-2018/p/12777641.html
Copyright © 2020-2023  润新知