• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Python re.sub 反向引用的实现

    re 模块是 Python 标准库中提供的用于处理正则表达式的模块,利用 re 模块可以方便的利用正则表达式实现字符串中的匹配、替换等操作

    match 分组

    Python re 模块中提供了 match 函数,用来匹配字符串中指定的正则表达式规则。例如,如果想匹配到 "Isaac Newton, physicist" 中的 Isaac Newton,则可以使用正则表达式 \w+ \w+ ,运行结果如下:

    >>> m = re.match("\w+ \w+", "Isaac Newton, physicist")
    >>> m
    re.Match object; span=(0, 12), match='Isaac Newton'>
    

    re.match 的第一个参数是指定的正则表达式规则,第二个参数是待匹配的字符串。正则表达式规则 \w+ 表示匹配一段连续的字符,要求匹配到的字符数量大于 1。 \w+ \w+ 就表示匹配两段连续的字符,且两段字符中间用空格隔开

    使用 match 执行匹配时会对匹配到的结果进行 分组 ,可以通过 match 返回结果的 group() 接口查看分组结果

    >>> m.group(0)
    'Isaac Newton'
    

    默认情况下, match 只会产生一个分组,就是第 0 个分组,表示整个匹配到的内容。对于上面的例子,第 0 个分组就是 \w+ \w+ 匹配到的完整的内容,也就是 Issac Newton 。
    使用正则表达式中的括号 () 可以手动指定匹配的分组。例如如果想把 Issac 和 Newton 做为两个分组,那么可以将正则表达式改为 (\w+) (\w+) :

    >>> m = re.match("(\w+) (\w+)", "Isaac Newton, physicist")
    

    在 (\w+) (\w+) 这个正则表达式中,指定了两个分组,这两个分组匹配的内容都是 \w+ ,并且两个分组之间用空格隔开。
    使用 groups() 可以查看匹配结果中的所有分组 :

    >>> m.groups()
    ('Isaac', 'Newton')
    

    也可以使用 group() 接口分别查看每一个分组,其中 group(0) 仍然表示完整的匹配结果, group(1) 表示匹配结果中的第 1 个分组, group(2) 表示第 2 个分组,以此类推:

    >>> m.group(0)
    'Isaac Newton'
    >>> m.group(1)
    'Isaac'
    >>> m.group(2)
    'Newton'
    

    re.sub 匹配和替换

    re.match() 函数提供了正则表达式的匹配接口, re.sub() 不光能匹配正则表达式,还能替换字符串中的结果,生成一个新的字符串。
    例如把字符串中 (\w+) (\w+) 匹配到的结果替换成 Albert Einstein ,可以这样写:

    >>> re.sub("(\w+) (\w+)", "Albert Einstein", "Isaac Newton, physicist")
    'Albert Einstein, physicist'

    re.sub 中第 1 个参数表示匹配的正则表达式,第 2 个参数表示替换表达式,第 3 个参数表示原始字符串

    这里的替换表达式是手动指定的新字符串 Albert Einstein ,他和原始字符串中的内容毫不相关。如果希望复用原始字符串中的内容,那么就需要用到 re.sub 的反向引用功能了。

    反向引用

    反向引用指的是在指定替换结果的过程中,可以引用原始字符串中的匹配到内容。例如 (\w+) (\w+) 在原始字符串中匹配到了 Isaac Newton ,利用匹配到的结果,将结果改写为 FirstName: Isaac, LastName: Newton 。
    既然需要引用,那么就得有一个表达式能够表示匹配的内容。恰好 re.sub 的匹配结果也有和 re.match 一样的分组,因此只需要在替换表达式中引用分组的结果即可。引用方式有以下几种:

    回到开始的例子中,将匹配结果 Isaac Newton改写为 FirstName: Isaac, LastName: Newton ,可以用以下表达式实现:

    >>> re.sub("(\w+) (\w+)", "FirstName: \g1>, LastName: \g2>", "Isaac Newton, physicist")
    'FirstName: Isaac, LastName: Newton, physicist'
    

    参考

     re — Regular expression operations
     Python re(gex)? -- Groupings and backreferences

    到此这篇关于Python re.sub 反向引用的实现的文章就介绍到这了,更多相关Python re.sub 反向引用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

    您可能感兴趣的文章:
    • 用Python代码自动生成文献的IEEE引用格式的实现
    • 浅析Python模块之间的相互引用问题
    • python3爬虫中引用Queue的实例讲解
    • python闭包与引用以及需要注意的陷阱
    • 详解python如何引用包package
    • python 引用传递和值传递详解(实参,形参)
    • Python参数传递机制传值和传引用原理详解
    • Python参数传递对象的引用原理解析
    • python实现引用其他路径包里面的模块
    • python关于多级包之间的引用问题
    上一篇:Python制作一个随机抽奖小工具的实现
    下一篇:python实现简单聊天功能
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Python re.sub 反向引用的实现 Python,re.sub,反向,引,用的,