• 关于re.sub从匹配的文本中处理后之际替换匹配匹配到的数据


    以往我们进行一个正则替换都是直接把和模板匹配到的文本直接替换成一个写死的文本,如:

    import re
    
    a = 'asdad123456asdasd'
    b = re.sub("\d", "*", a)
    print(b)

    但是呢,现在我们有个需求,从匹配的文本中进行一个提取和处理,在替换回来,这个怎么做呢?

    看下re.sub的源码:

    def sub(pattern, repl, string, count=0, flags=0):
        """Return the string obtained by replacing the leftmost
        non-overlapping occurrences of the pattern in string by the
        replacement repl.  repl can be either a string or a callable;
        if a string, backslash escapes in it are processed.  If it is
        a callable, it's passed the Match object and must return
        a replacement string to be used."""
        return _compile(pattern, flags).sub(repl, string, count)

    使用方式一:

    如果第二个参数是函数,那么它需要接收一个参数,这个参数是一个match对象。如下图所示:

    <re.Match object; span=(0, 1), match='1'>
    1
    <re.Match object; span=(7, 8), match='2'>
    2
    <re.Match object; span=(19, 20), match='3'>
    3
    &asdada&sdasdasdasd&

    原字符串中有多少项被匹配到,这个函数就会被调用几次。

    至于传进来的这个match对象,我们调用它的.group(0)方法,就能获取到被匹配到的内容,

    使用方式二:

    匿名函数:

    import re
    
    
    
    a = '1asdada2sdasdasdasd3'
    
    js_pattern="<scrpit.*?src=(.*?).*?>"
    
    result=re.sub(js_pattern,lambda m:m.group(1).split("?")[0],a)
  • 相关阅读:
    Oracle 获取创建控制文件的脚本
    ESXi下误删磁盘分区
    Oracle 3DES加密示例
    Oracle job 执行多个存储过程
    解开紧箍咒
    国际关系之美国南海战略意图(转)
    GHOST系统锁定主页常用软件及解决方案
    cut命令详解
    grep命令详解
    awk命令详解
  • 原文地址:https://www.cnblogs.com/tjp40922/p/15983156.html
Copyright © 2020-2023  润新知