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

Python正则反向引用交换字符串字符时re.sub输出异常怎么办

问题原因

你的写法存在两个核心疏漏:

  1. 正则匹配范围覆盖了整个原字符串,且仅捕获了两个单词的首字符h和w,两个首字符之外的所有内容(ello 、orld)虽然被.+匹配,但没有被放入捕获组保留。re.sub()会将整个正则匹配到的完整片段替换为你传入的替换字符串,未被捕获的匹配内容会被直接丢弃,最终只剩两个捕获组的内容。
  2. 替换字符串中额外在两个分组之间加了空格,即使内容不丢失也会出现多余空格。
修正方案

把需要保留的中间内容、尾部内容也放入捕获组,替换时调整捕获组的引用顺序即可,修正后的代码如下:

import re
st = "hello world"
# 分组说明:
# 1: 第一个单词首字符 2: 第一个单词剩余内容+中间空格 3:第二个单词首字符 4:第二个单词剩余内容
t = re.compile(r"(\w)(\w+\s)(\w)(\w+)")
res = t.sub(r"\3\2\1\4", st)
print(res)

运行后即可输出目标结果wello horld。
如果需要适配首尾位置更严谨的匹配,也可以给正则加上开头结尾锚定符,写成r"^(\w)(\w+\s)(\w)(\w+)$",效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:27:45