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

Python中Regex Sub分组匹配:替换特定双引号的技术问题咨询

解决Python Regex Sub替换内部双引号为单引号的问题

嘿,我明白你遇到的问题了——咱们一步步拆解,把这个替换功能搞定。

首先,你得到i$1'$2这种奇怪输出的根本原因:你在替换字符串里用了Perl风格的分组引用($1、$2),但Python的re.sub()是用反斜杠(\1、\2)来引用分组的。所以那些$1会被当作普通文本直接输出,而不是插入你捕获的内容。

现在回到你的核心需求:把夹在单词字符中间的双引号(比如"it"s"里的中间引号)替换成单引号,同时保留外层的双引号。

方案一:使用环视断言(最简洁的方式)

环视断言特别适合这种场景——它能匹配目标引号,但不会捕获周围的字符,所以你的替换内容只需要一个单引号就行。

正则表达式(?<=\w)"(?=\w)会匹配紧接在单词字符(\w代表字母、数字、下划线)之后、且紧随另一个单词字符之前的双引号。用法如下:

import re

original_str = '"it"s"'  # 在Python中实际要写成'"it\"s"'来转义内部引号
fixed_str = re.sub(r'(?<=\w)"(?=\w)', "'", original_str)
print(fixed_str)  # 输出:"it's"

方案二:使用捕获分组(如果你偏好显式捕获)

如果你想用捕获分组的方式,记得在替换字符串里用\1和\2来引用分组。这个模式会捕获引号前后的字符,然后把它们和中间的单引号重新拼接起来:

import re

original_str = '"it"s"'
fixed_str = re.sub(r'(\w)"(\w)', r'\1\'\2', original_str)
print(fixed_str)  # 输出:"it's"

处理更广泛的场景

如果你需要替换任何非首尾位置的双引号(不局限于单词字符之间),可以把环视断言改成匹配任意字符:(?<=.)"(?=.)。不过要注意,这个模式会替换像he said "hello"里的引号(因为它们夹在空格和单词之间),如果这不是你想要的,还是用\w版本更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:46:47