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

Python正则表达式:如何移除成对单引号并保留单个单引号

解决成对单引号移除但保留单个单引号的正则问题

问题分析

你当前用的正则r"\'(.*?)\'"搭配空字符串替换,会把匹配到的引号+内容全部删除,核心原因是没保留捕获组里的内容,直接替换成了空。

解决方案

根据你要移除包裹内容的成对单引号、保留Apple’s这类单个单引号的需求,有两种实用实现方式:

1. 捕获组保留内容(移除所有成对单引号)

用正则捕获引号中间的内容,替换时引用捕获组,只去掉前后的单引号:

import re

# 测试案例
test_cases = ["'Apple'", "'[apple]'", "Apple's", "'Apple' and 'Banana'"]
for case in test_cases:
    result = re.sub(r"'(.*?)'", r"\1", case)
    print(f"原字符串: {case} → 处理后: {result}")

输出结果:

原字符串: 'Apple' → 处理后: Apple
原字符串: '[apple]' → 处理后: [apple]
原字符串: Apple's → 处理后: Apple's
原字符串: 'Apple' and 'Banana' → 处理后: Apple and Banana
  • 正则说明:'(.*?)'匹配成对单引号,(.*?)以非贪婪模式捕获引号间的所有内容;替换为\1表示保留捕获到的内容,仅去掉前后引号。

2. 匹配首尾成对引号(仅移除包裹整个字符串的单引号)

如果你的需求只是移除包裹整个字符串的成对单引号,不处理字符串内部的成对引号,可以用锚点限定匹配范围:

import re

test_cases = ["'Apple'", "'[apple]'", "Apple's", "Hello 'Apple' world"]
for case in test_cases:
    result = re.sub(r"^'(.*)'$", r"\1", case)
    print(f"原字符串: {case} → 处理后: {result}")

输出结果:

原字符串: 'Apple' → 处理后: Apple
原字符串: '[apple]' → 处理后: [apple]
原字符串: Apple's → 处理后: Apple's
原字符串: Hello 'Apple' world → 处理后: Hello 'Apple' world
  • 正则说明:^匹配字符串开头,$匹配字符串结尾,确保只替换首尾的成对单引号。

关键注意点

  • 别用空字符串替换,要通过捕获组\1保留需要的内容;
  • 非贪婪模式.*?能避免错误匹配多个成对引号之间的所有内容(比如防止把'A' 'B'误匹配成整个'A' 'B')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:45:44