zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    MySQL的Limit 性能差?真的不能再用了?
    天天写order by,你知道Mysql底层如何执行吗?
    微信小程序 rich-text使用正则去除html中img标签中的css样式
    微信小程序开发加入版本更新提示并自动更新
    keepass 用户名显示星号的问题
    firebase/php-jwt使用openssl实现 RSA非对称加密
    Homstead ubuntu 系统pip3的安装
    sqlserver 重置自增列种子值 违反了 PRIMARY KEY 约束的处理
    ghost 安装系统出现EFI PART红色错误的问题
    在laravel 5.6中接管dingo/api 错误
  • 原文地址:https://www.cnblogs.com/yang-2018/p/12777641.html
Copyright © 2011-2022 走看看