re.sub功能是对于一个输入的字符串,利用正则表达式,来实现字符串替换处理的功能返回处理后的字符串

re.sub共有五个参数

三个必选参数pattern,repl,string

两个可选参数count,flags

pattern,表示正则中的模式字符串

  反斜杠加数字(\n)表示对应匹配的也就是用之前匹配到的字符串补充到这个位置,例如

  将“hello python,ni hao c,zai jian python”替换为php,代码如下替换成功

import re
inputstr="hello python,ni hao c,zai jian python"
replacestr=re.sub(r"hello(\w+),ni hao(\w+),zai jian \1","php",inputstr)
print(replacestr)

代码中的\1表示第一次匹配到的字符串也就是“python”,这样可以匹配原来的字符串,从而整个字符串替换为php

若改为下面这样

import re
inputstr="hello python,ni hao c,zai jian python"
replacestr=re.sub(r"hello (\w+),ni hao (\w+),zai jian \2","php",inputstr)
print(replacestr)

代码中的\2表示第二次匹配到的字符串也就是“c”,显然不能和原来的字符串匹配,所以不会替换

这里是为了说明区别\n代表的是第n次所匹配到字符串,而不是第n次用到的匹配模式

repl,表示要被替换的,可以是字符串也可以是函数,

  • 如果是字符串,则所有的反斜杠转义字符都会被处理
  • \n:被处理为对应的换行符
  • \r :被处理为回车符
  • 不能被识别的转义字符,则只是被识别为普通的字符,例如:\j被处理为j这个字母本身
  • 反斜杠加g以及中括号内一个名字,即\g<name>对应命名了的组
import re
inputStr="hello python,ni hao c,zai jian python"
replaceStr=re.sub(r"hello (\w+),ni hao (\w+),zai jian \1","\g<2>",inputStr)
print replaceStr
  • 运行结束输出c,这里的g<2>表示用第二个匹配到的字符串进行替换,也就是标红部分
  • 也可以用命名分组的方式
import re
inputStr="hello python,ni hao c,zai jian python"
replaceStr=re.sub(r"hello (?P<word1>\w+),ni hao (?P<word2>\w+),zai jian \1","\g<word2>",inputStr)
print replaceStr
  • 输出结果为c,将每个匹配的字符串进行了命名,word2匹配到的是c
  • 如果是函数,则可以这样使用
import re
def pythonSubDemo():
inputStr="hello 123 world 456";
def _add111(matched):
intStr=matched.group("number")
intValue=int(intStr)
addValue=intValue+111
addValueStr=str(addValue)
return addValueStr
replacedStr=re.sub("(?P<number>\d+)",_add111,inputStr)
print replacedStr
if __name__=="__main__":
pythonSubDemo()

主要代码解释,匹配字符串中的数字,将其命名为组number,一共匹配到两个123和456

将匹配到的东西执行_add111函数,判断是不是组名为number,然后执行

  • string,要处理的字符串
 
  • count,限定替换的个数,默认为替换所有
 
  • flags,匹配模式,可以使用按位或‘|‘表示同时生效,也可以在正则表达式中指定。

    • re.I忽略大小写
    • re.L表示特殊字符集\w,\W,\b,\B,\s,\S
    • re.M表示多行模式
    • re.S ‘.’包括换行符在内的任意字符
    • re.U表示特殊字符集\w,\W,\b,\B,\d,\D,\s,\D

re.sub用法的更多相关文章

  1. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  2. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  5. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  6. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  7. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  8. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

  9. 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)

    vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...

  10. [转]thinkphp 模板显示display和assign的用法

    thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...

随机推荐

  1. UVA 133“The Dole Queue”(循环报数处理技巧)

    •参考资料 [1]:紫书P82 •题意(by紫书) 按照被选中的次序输出这 n 个人的编号: 如果A和B选中的是同一个人,输出一个这个人的编号: 输出格式:输出的每个编号占3个字节,不够3个字节在前面 ...

  2. dedecms让channelartlist标签支持currentstyle属性方

    把dedecms中用channelartlist当导航的站很普遍,但是有的站需要用到当前页中导航样,就是随着不同的页面,导航样式也随着变化. 首先打开include\taglib\channelart ...

  3. DEDECMS图片集上传图片出错302的解决办法

    无忧主机(www.51php.com)小编今天在调试dede网站的时候发现了一个问题,因为小编想在网站上增加一个图片集的栏目,于是就到后台图片集栏目去添加内容,谁知在上传图片的时候给我弹出个错误信息框 ...

  4. mac搭建安卓开发环境

    下载 android studio,利用android studio自带sdk manager下载安卓sdk,在sdk manager中设置相关代理地址,下载完sdk后,在bash_profile中把 ...

  5. git工程迁移(修改提交服务器地址)方法

    git remote set-url [--push] <name> <newurl> [<oldurl>]git remote set-url --add [-- ...

  6. Galileo Gen2 之MQTT通讯

    前言 原创文章,转载引用务必注明链接.如有疏漏,欢迎斧正. Galileo系统:完整版Yocto,内核版本3.8.7-yocto-standard:宿主机:Windows 7 64 bit 这期主要讲 ...

  7. 实战c++中的vector系列--vector的遍历(stl算法、vector迭代器(不要在循环中推断不等于end())、operator[])

    遍历一个vector容器有非常多种方法.使用起来也是仁者见仁. 通过索引遍历: for (i = 0; i<v.size(); i++) { cout << v[i] << ...

  8. iOS - 贝塞尔曲线,折线,曲线,波浪线

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHlsYW5fbHdiXw==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  9. php nginx超时出错

    执行PHP操作大文件insert mysql数据库时,出现这个错误提示 The page you are looking for is temporarily unavailable.Please t ...

  10. 把对象写入Postgresql中

    工作中,遇到把大对象写入Postgresql数据库中 package com.geni_sage.gdme.cws.dic; import java.io.BufferedInputStream; i ...