re.sub 使用方法

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

### Python `re.sub()` 方法使用说明 `re.sub()` 是 Python 中正则表达式模块 `re` 提供的一个功能强大的工具,用于在字符串中查找匹配项并将它们替换为指定的内容。以下是关于此方法的详细介绍: #### 函数定义 `re.sub(pattern, repl, string, count=0, flags=0)` - **pattern**: 要被匹配的正则表达式模式(可以是字符串形式或预编译的对象)。[^2] - **repl**: 替换内容,可以是一个普通的字符串或者一个返回所需替换值的回调函数。 - **string**: 需要处理的目标字符串。 - **count** (可选): 控制最多替换多少次,默认为 0 表示不限制次数。 - **flags** (可选): 设置额外标志位,比如忽略大小写的 `re.IGNORECASE`。 #### 基础用法实例 下面是一些简单的例子展示如何利用 `re.sub()` 进行基本操作: ```python import re text = "订单号:AB2025 金额:1500元" result = re.sub(r"\d", "*", text) # 将所有的数字替换成星号(*) print(result) # 输出: 订单号:AB**** 金额:****元 ``` 如果只想替换前几次出现的结果,则可以通过设置参数 `count` 来控制数量: ```python text = "1-2-3-4-5" result = re.sub("-", ":", text, count=2) # 只替换前面两个'-' print(result) # 输出: 1:2:3-4-5 ``` #### 复杂场景应用——分组捕获与反向引用 当涉及到更复杂的文本结构变换时,我们可以借助括号 `( )` 定义分组,并通过 `\number` 的方式调用这些已捕捉到的信息来做进一步加工: ```python date_string = '2018-06-07' new_format_date = re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\2-\3-\1', date_string) print(new_format_date) # 输出: 06-07-2018 ``` 这里我们把日期格式从 YYYY-MM-DD 改为了 MM-DD-YYYY 。[^4] 另外还有一种更加灵活的方式就是传入一个 lambda 或者其他类型的 callable 对象作为第二个参数,在这种情况下每次找到匹配都会执行该函数从而动态决定最终应该填入什么内容进去. #### 性能考量与其他注意事项 尽管 `re.sub()` 十分强大且广泛应用于各种场合下完成诸如批量清理、标准化转换等工作流程之中,但在某些特定条件下也可能存在性能瓶颈等问题需要注意规避.[^3] --- 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值