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

如何使用Regex sub()仅替换匹配模式中的特定部分?

如何用sub()仅替换正则匹配模式中的特定部分?

你的需求是给位于字母/数字之间的省略号后添加空格,原代码的问题在于:正则\w\.\.\.\w会把省略号前后的字母也包含在匹配范围内,替换时会把这些字母一起换掉,导致结果不符合预期。

可以通过两种方式实现目标:

方法1:使用捕获组保留原有字符

通过正则捕获组把需要保留的前后字母/数字存下来,替换时将它们和修改后的省略号拼接起来:

import re
input_str = "hello...world"
result = re.sub(r'(\w)\.\.\.(\w)', r'\1... \2', input_str)
print(result)  # 输出: hello... world
  • (\w):捕获省略号前的字母/数字,用\1在替换字符串中引用
  • \.\.\.:匹配三个连续的点
  • (\w):捕获省略号后的字母/数字,用\2在替换字符串中引用
  • 替换字符串\1... \2:保留前后捕获的字符,仅在省略号后添加空格

方法2:使用零宽断言定位替换位置

零宽断言不会捕获字符,只是用来确定目标内容的位置,这样可以直接定位到需要修改的省略号:

import re
input_str = "hello...world"
result = re.sub(r'(?<=\w)\.\.\.(?=\w)', r'... ', input_str)
print(result)  # 输出: hello... world
  • (?<=\w):正向零宽后行断言,确保省略号前面是字母/数字
  • \.\.\.:匹配三个连续的点
  • (?=\w):正向零宽先行断言,确保省略号后面是字母/数字
  • 替换时直接把匹配到的...换成... ,前后的字母/数字不会被改动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:16:01