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

是否存在算法可将英文短语中的直撇号、直引号替换为对应斜向变体?

英文直引号转弯引号的实现方法

是有成熟算法可以完成这个转换的,这类算法通常被叫做「智能引号(Smart Quotes)转换算法」,针对你说的语法正确的英文输入场景,准确率基本可以到99%以上,几乎不会出现误判。

核心判断规则

直双引号 "(U+0022)替换逻辑

  • 出现在行首、空白字符之后,或者破折号、左括号这类前置标点之后时,判定为左双引号,替换为 “(U+201C)
  • 其余场景判定为右双引号,替换为 ”(U+201D)

直单引号 '(U+0027)替换逻辑

这个字符会同时用作撇号和包裹用单引号,需要先做场景判断:

  1. 撇号场景:符合以下任意一种情况时,直接替换为 ’(U+2019,Unicode 标准里这个字符同时用作英文撇号):
    • 出现在两个英文字母中间,比如 don't、I'm
    • 出现在行首后接字母,是单词缩写场景,比如 'Tis、'em
    • 出现在数字/单词末尾表所属格,比如 the 90s'、James' bike
  2. 包裹用单引号场景:规则和双引号完全一致:
    • 出现在行首、空白字符之后、前置标点之后时,判定为左单引号,替换为 ‘(U+2018)
    • 其余场景判定为右单引号,替换为 ’(U+2019)

简化实现伪代码

你可以参考下面的逻辑自己实现,也可以直接用各语言现成的第三方库:

def convert_smart_quotes(text: str) -> str:
    # 引号状态标记,用于嵌套场景校验
    single_open = False
    double_open = False
    chars = list(text)
    for i, c in enumerate(chars):
        prev_char = chars[i-1] if i > 0 else ''
        next_char = chars[i+1] if i < len(chars)-1 else ''
        if c == '"':
            if (prev_char in ('', ' ', '-', '(') or not double_open):
                chars[i] = '“'
                double_open = True
            else:
                chars[i] = '”'
                double_open = False
        elif c == "'":
            # 先判断是否为撇号场景
            if (prev_char.isalpha() and next_char.isalpha()) \
                or (prev_char in ('', ' ') and next_char.isalpha()) \
                or (prev_char.isalnum() and next_char in (' ', '.', ',', '?', '!', ')')):
                chars[i] = '’'
            else:
                if (prev_char in ('', ' ', '-', '(') or not single_open):
                    chars[i] = '‘'
                    single_open = True
                else:
                    chars[i] = '’'
                    single_open = False
    return ''.join(chars)

现在主流的文字处理软件、排版工具(比如微软Word、LaTeX的csquotes包)都内置了这套逻辑,你给出的三个示例都可以被完美转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:27:03