Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 309|回复: 0

[默认分类] python - re正则匹配模块

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-3-16 13:22:15 | 显示全部楼层 |阅读模式
    re模块

    re 模块使 python 语言拥有全部的正则表达式功能。

    compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

    re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。


    re.match函数

    re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

    # (匹配规则,字符串,特殊标志)
    re.match(pattern, string, flags=0)

    re.search方法

    re.search 扫描整个字符串并返回第一个成功的匹配。

    re.search(pattern, string, flags=0)
    re.match与re.search的区别

    re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

    #!/usr/bin/python
    import re

    line
    = "Cats are smarter than dogs";

    matchObj
    = re.match( r'dogs', line, re.M|re.I)
    if matchObj:
       
    print "match --> matchObj.group() : ", matchObj.group()
    else:
       
    print "No match!!"

    matchObj
    = re.search( r'dogs', line, re.M|re.I)
    if matchObj:
       
    print "search --> matchObj.group() : ", matchObj.group()
    else:
       
    print "No match!!"

    No match!!
    search
    --> matchObj.group() :  dogs

    检索和替换

    Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。

    # pattern 正则中的模式字符串。
    #
    repl 替换的字符串,也可为一个函数。
    #
    string 要被查找替换的原始字符串。
    #
    count 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
    re.sub(pattern, repl, string, count=0, flags=0)

    #### 实例
    #
    !/usr/bin/python
    #
    -*- coding: UTF-8 -*-

    import re

    phone
    = "2004-959-559 # 这是一个国外电话号码"

    # 删除字符串中的 Python注释
    num = re.sub(r'#.*$', "", phone)
    print "电话号码是: ", num

    # 删除非数字(-)的字符串
    num = re.sub(r'\D', "", phone)
    print "电话号码是 : ", num

    电话号码是:  2004-959-559
    电话号码是 :  
    2004959559

    re.compile 函数

    compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

    #### parttern re.compile(pattern[, flags])
    #
    ### flags
    #
    re.I 忽略大小写
    #
    re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
    #
    re.M 多行模式
    #
    re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
    #
    re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
    #
    re.X 为了增加可读性,忽略空格和 # 后面的注释
    re.compile(pattern[, flags])

    >>>import re
    >>> pattern = re.compile(r'([a-z]+) ([a-z]+)', re.I)   # re.I 表示忽略大小写
    >>> m = pattern.match('Hello World Wide Web')
    >>> print m                               # 匹配成功,返回一个 Match 对象
    <_sre.SRE_Match object at 0x10bea83e8>
    >>> m.group(0)                            # 返回匹配成功的整个子串
    'Hello World'
    >>> m.span(0)                             # 返回匹配成功的整个子串的索引
    (0, 11)
    >>> m.group(1)                            # 返回第一个分组匹配成功的子串
    'Hello'
    >>> m.span(1)                             # 返回第一个分组匹配成功的子串的索引
    (0, 5)
    >>> m.group(2)                            # 返回第二个分组匹配成功的子串
    'World'
    >>> m.span(2)                             # 返回第二个分组匹配成功的子串
    (6, 11)
    >>> m.groups()                            # 等价于 (m.group(1), m.group(2), ...)
    ('Hello', 'World')
    >>> m.group(3)                            # 不存在第三个分组
    Traceback (most recent call last):
      File
    "<stdin>", line 1, in <module>
    IndexError: no such group


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-17 02:07 , Processed in 0.405112 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表