zoukankan      html  css  js  c++  java
  • Python:笔记(6)——正则表达式

    Python:笔记(6)——正则表达式

    re模块

      re模块用于在字符串中执行基于正则表达式模式的匹配和替换

    使用原始字符串

      正则表达式使用  对特殊字符进行转义,比如,为了匹配字符串 ‘python.org’,我们需要使用正则表达式 'python.org'。

      但是Python 的字符串本身也用  转义,所以上面的正则表达式在 Python 中应该写成 'python\.org',这会很容易陷入  的困扰中,因此,我们建议使用 Python 的原始字符串,只需加一个 r 前缀,上面的正则表达式可以写成:

    r'python.org'

    关于中文的匹配

       正则匹配中文,固定形式:[u4E00-u9FA5]+。

    import re
    str = 'posted @ 2018-11-03 15:00 MrSaber 阅读(82) 评论(0)'
    pattern = re.compile(r'[u4E00-u9FA5]+((d+))');
    m = pattern.findall(str)
    print(m)

    re模块的使用步骤

    • 使用 compile 函数将正则表达式的字符串形式编译为一个 Pattern 对象
    • 通过 Pattern 对象提供的一系列方法对文本进行匹配查找,获得匹配结果(一个 Match 对象)
    • 最后使用 Match 对象提供的属性和方法获得信息,根据需要进行其他的操作

    编译Pattern对象

      compile 函数用于编译正则表达式,生成一个 Pattern 对象,它的一般使用形式如下:

    re.compile(pattern[, flag])

      其中,pattern 是一个字符串形式的正则表达式,flag 是一个可选参数,表示匹配模式,比如忽略大小写,多行模式等。

    import re
    # 将正则表达式编译成 Pattern 对象 
    pattern = re.compile(r'd+')

      在上面,我们已将一个正则表达式编译成 Pattern 对象,接下来,我们就可以利用 pattern 的一系列方法对文本进行匹配查找了。Pattern 对象的一些常用方法主要有:

    • match 方法
    • search 方法
    • findall 方法
    • finditer 方法
    • split 方法
    • sub 方法
    • subn 方法

    匹配

      我们主要讨论一下四个匹配方法的区别。

    match(pattern,string,[,flags])

      检查String的开头是否有字符与pattern匹配。如果成功,返回一个MatchObject,否则返回None。

    search(pattern,string,[,flags])

      在String中搜索pattern的第一个匹配值。如果成功,返回一个MatchObject,否则返回None。

      以下面代码为例,我们想匹配阅读数,但是阅读不是str的开头,所以match匹配失败。

    import re
    str = 'posted @ 2018-11-03 15:00 MrSaber 阅读(82) 评论(0)'
    pattern = re.compile(r'阅读((d+))');
    m1 = pattern.search(str)
    m2 = pattern.match(str)
    print(m1) # 阅读(82)
    print(m2) # None

    findall(pattern,string,[,flags])

      返回String中与pattern匹配的所有未重叠的值,包括空匹配值。如果模式包含分组,将返回与分组匹配的文本列表。如果使用了不止一个分组,那么列表中的每项都是一个元组,包含每个分组的文本。

    finditer(pattern,string,[,flags])

      与findall方法含义相同,但是返回的是一个迭代器对象。迭代器的返回类型是MatchObject的项。

    分组

      除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()表示的就是要提取的分组(Group)。比如:

      ^(d{3})-(d{3,8})$分别定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码:

    >>> m = re.match(r'^(d{3})-(d{3,8})$', '010-12345')
    >>> m
    <_sre.SRE_Match object; span=(0, 9), match='010-12345'>
    >>> m.group(0)
    '010-12345'
    >>> m.group(1)
    '010'
    >>> m.group(2)
    '12345'
    

      

     

  • 相关阅读:
    Java里的阻塞队列
    ReentrantReadWriteLock读写锁实现分析
    策略模式
    Java线程池技术以及实现
    分布式锁的思路以及实现分析
    Protobuf入门实例
    配置maven环境变量并安装jar包到本地仓库
    nio简单客户端服务端实例
    Java内存模型(JMM)中的happens-before
    Java中锁的内存语义
  • 原文地址:https://www.cnblogs.com/MrSaver/p/10587691.html
Copyright © 2011-2022 走看看