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

正则匹配时如何捕获指定模式中的数字并在替换中复用?

捕获正则中的数字用于替换的实现方法

嘿,这个需求其实很好解决,核心就是利用正则的捕获分组功能,把你需要的数字提取出来,再在替换环节引用它就可以了,不用再硬编码数字啦。我给你分两种常见场景来说明:

一、简单替换:用反向引用直接复用捕获的数字

如果只是单纯把捕获到的数字放到替换文本里,直接用正则的反向引用就够了。步骤很简单:

  1. 在正则表达式里,把要捕获的\d+用括号()包起来,形成一个捕获组;
  2. 在替换字符串里,用\1(代表第一个捕获组的内容)来引用这个数字。

举个实际代码例子:

import re

# 你的目标文本
text1_to_search = "这里是测试文本 (r749679 ASSRT) 还有另一处 (r123456 ASSRT)"
# 正则模式:用括号捕获数字部分
pattern = r"\(r(\d+) ASSRT\)"
# 替换文本:用\1引用捕获到的数字
replacement1_text = r"替换后的内容:捕获到的数字是 \1"

# 执行替换
result = re.sub(pattern, replacement1_text, text1_to_search)
print(result)

运行后输出会是:

这里是测试文本 替换后的内容:捕获到的数字是 749679 还有另一处 替换后的内容:捕获到的数字是 123456

二、复杂处理:用回调函数动态加工捕获的数字

如果你需要对捕获到的数字做额外处理(比如转成整数、加减运算、格式化等),用回调函数会更灵活。回调函数会接收一个匹配对象,你可以通过它获取捕获的内容,再返回最终的替换字符串。

示例代码如下:

import re

def process_match(match):
    # 从匹配对象中取出捕获的数字,转成整数
    captured_num = int(match.group(1))
    # 这里可以加任意逻辑,比如给数字加100
    processed_num = captured_num + 100
    # 返回最终要替换的内容
    return f"处理后的数字:{processed_num}"

text1_to_search = "需要替换的文本 (r749679 ASSRT)"
pattern = r"\(r(\d+) ASSRT\)"

# 把回调函数传给re.sub的第二个参数
result = re.sub(pattern, process_match, text1_to_search)
print(result)

运行后输出:

需要替换的文本 处理后的数字:749779

关键要点总结

  • 正则里的()是捕获分组的核心,它会把括号内匹配到的内容存起来,供后续引用;
  • 简单场景用\1(第一个捕获组)直接引用,多分组的话可以用\2、\3依次类推;
  • 复杂逻辑就用回调函数,能灵活处理捕获到的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:02:12