zoukankan      html  css  js  c++  java
  • python re.sub详解

    re.sub(patternreplstringcount=0flags=0)

    re.sub的含义,作用,功能就是:

    对于输入的一个字符串,利用正则表达式(的强大的字符串处理功能),去实现(相对复杂的)字符串替换处理,然后返回被替换后的字符串

    其中re.sub还支持各种参数,比如count指定要替换的个数等等。

    下面就是来详细解释其各个参数的含义。

    re.sub共有五个参数。

    其中三个必选参数:patternreplstring

    两个可选参数:countflags

    1:

    pattern,表示正则中的模式字符串,这个没太多要解释的。

    需要知道的是:

    • 反斜杠加数字(N),则对应着匹配的组(matched group)
      • 比如6,表示匹配前面pattern中的第6个group
      • 意味着,pattern中,前面肯定是存在对应的,第6个group,然后你后面也才能去引用

    比如,想要处理:

    hello crifan, nihao crifan

    而想要把整个这样的字符串,换成crifanli且此处的,前后的crifan,肯定是一样的。

    则就可以这样的re.sub实现替换:

    inputStr = "hello crifan, nihao crifan";

    replacedStr = re.sub(r"hello (w+), nihao 1", "crifanli", inputStr);
    print "replacedStr=",replacedStr; #crifanli
     
    2:

    repl,就是replacement,被替换,的字符串的意思。

    repl可以是字符串,也可以是函数。

    repl是字符串

    如果repl是字符串的话,其中的任何反斜杠转义字符,都会被处理的。

    即:

    • :会被处理为对应的换行符;
    • :会被处理为回车符;
    • 其他不能识别的转移字符,则只是被识别为普通的字符:
      • 比如j,会被处理为j这个字母本身;
    • 反斜杠加g以及中括号内一个名字,即:g<name>,对应着命了名的组,named group

    接着上面的举例:

    想要把对应的:

    hello crifan, nihao crifan

    中的crifan提取出来,只剩:crifan

    inputStr = "hello crifan, nihao crifan";

    replacedStr = re.sub(r"hello (w+), nihao 1", "g<1>", inputStr);
    print "replacedStr=",replacedStr; #crifan
     

    repl是函数

    比如输入内容是:hello 123 world 456

    想要把其中的数字部分,都加上111,变成:hello 234 world 567

    import re;
     
    def pythonReSubDemo():
        """
            demo Pyton re.sub
        """
        inputStr = "hello 123 world 456";
         
        def _add111(matched):
            intStr = matched.group("number"); #123
            intValue = int(intStr);
            addedValue = intValue + 111; #234
            addedValueStr = str(addedValue);
            return addedValueStr;
             
        replacedStr = re.sub("(?P<number>d+)", _add111, inputStr);
        print "replacedStr=",replacedStr; #hello 234 world 567
     
    ###############################################################################
    if __name__=="__main__":
        pythonReSubDemo();
    

      

    3:

    string,即表示要被处理,要被替换的那个string字符串。

    4:

    count

    假如对于匹配到的内容,只处理其中一部分

    比如对于:hello 123 world 456 nihao 789

    只是像要处理前面两个数字:123,456,分别给他们加111,而不处理789,

    import re;
     
    def pythonReSubDemo():
        """
            demo Pyton re.sub
        """
        inputStr = "hello 123 world 456 nihao 789";
         
        def _add111(matched):
            intStr = matched.group("number"); #123
            intValue = int(intStr);
            addedValue = intValue + 111; #234
            addedValueStr = str(addedValue);
            return addedValueStr;
             
        replacedStr = re.sub("(?P<number>d+)", _add111, inputStr, 2);
        print "replacedStr=",replacedStr; #hello 234 world 567 nihao 789
     
    ###############################################################################
    if __name__=="__main__":
        pythonReSubDemo();
    

      

    关于re.sub的注意事项:

    语法:

    re.sub(pattern, repl, string, count=0, flags=0)

    对应的第二个参数是repl。

    需要你指定对应的r前缀,才是pattern:

    r"xxxx"

     
  • 相关阅读:
    【】Libevent源码解析
    sftp使用
    世界boss设计
    记一次薪酬谈判的教训 .
    一些常用的文件操作代码
    一位总经理的辞职信,以及回复
    JMeter安装、文档参考
    Charles——charles代理菜单proxy总结——external proxy 外部代理设置
    JDK安装
    Charles——charles常用功能——重定向
  • 原文地址:https://www.cnblogs.com/dancesir/p/6933768.html
Copyright © 2011-2022 走看看