You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用regex sub修改匹配部分实现子串替换及内容插入?

使用正则表达式sub实现匹配子串的修改与插入操作

一、在匹配内容末尾添加内容(你的示例场景)

针对你给出的需求:将字符串中所有符合r'[A-Z][a-z]+'的单词末尾加上1,可以通过re.sub的两种方式实现:

方法1:使用lambda匿名函数处理匹配项

直接对每个匹配结果进行字符串拼接:

import re

original_str = "The most comment log in coding is Hello World"
pattern = r'[A-Z][a-z]+'

result = re.sub(pattern, lambda m: m.group() + '1', original_str)
print(result)
# 输出:The1 most comment log in coding is Hello1 World1

这里lambda m中的m是匹配对象,m.group()获取当前匹配到的完整子串,后续拼接'1'即可完成替换。

方法2:使用分组引用(适合简单场景)

用\g<0>直接引用整个匹配内容,语法更简洁:

result = re.sub(pattern, r'\g<0>1', original_str)
# 输出结果与方法1一致

二、在匹配内容中间插入内容

如果需要在匹配子串的中间位置插入内容,核心思路是通过正则分组拆分匹配内容,再重组插入新内容,或者用自定义函数实现动态逻辑。

场景1:固定位置插入

比如要在每个匹配单词的第二个字符后插入1,先通过正则分组拆分单词:

# 正则分组:第一组是首字母+第二个字符,第二组是剩余字符
pattern_mid = r'([A-Z][a-z])([a-z]+)'
result_mid = re.sub(pattern_mid, r'\11\2', original_str)
print(result_mid)
# 输出:T1he most comment log in coding is He1llo W1orld

这里\1引用第一组匹配的内容,\2引用第二组,中间插入1后重组即可。

场景2:动态位置插入(根据匹配内容长度)

如果需要根据单词长度动态选择插入位置(比如在单词中间位置插入),可以自定义处理函数:

def insert_dynamic(match):
    word = match.group()
    # 取长度的一半作为插入位置
    insert_pos = len(word) // 2
    return word[:insert_pos] + '1' + word[insert_pos:]

result_dynamic = re.sub(pattern, insert_dynamic, original_str)
print(result_dynamic)
# 输出:Th1e most comment log in coding is Hel1lo Wo1rld

核心总结

re.sub的两种核心用法:

  • 字符串替换:适合固定规则的修改,用\g<n>引用分组内容(n为分组序号,\g<0>代表整个匹配)
  • 函数替换:适合动态逻辑的修改,函数接收匹配对象为参数,返回处理后的字符串

内容的提问来源于stack exchange,提问作者Ammar Ibraheem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:55:22