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

正则表达式匹配双引号内外孤立左单引号(‘)的技术咨询

优化正则表达式匹配孤立左单引号

需求明确

需要匹配孤立左单引号(‘),无论其位于双引号(“”)内部还是外部,规则如下:

  • 双引号外的孤立左单引号:左单引号后,到下一个左单引号或行尾前,不存在非缩写形式的右单引号(’);缩写定义为’后紧跟字母的情况(如‘this’s中的’属于缩写,不视为匹配的右单引号)
  • 双引号内的孤立左单引号:左单引号后,到下一个左单引号、右双引号或行尾前,不存在非缩写形式的右单引号

原正则问题分析

原正则(“[^“]+?”[^‘]*)*‘(.(?!’[^A-Za-z]))+(‘|$)存在以下缺陷:

  • 未处理双引号内的终止条件(右双引号),导致双引号内的孤立左单引号无法被正确识别
  • 行边界处理逻辑不完善,无法准确匹配行尾前的孤立左单引号
  • 未考虑多左单引号连续出现的场景匹配

优化后的正则表达式

(?:"[^"]*?"|[^"‘’])*‘(?:(?!’[A-Za-z]|["‘’]))*(?=["‘’]|$)

正则逻辑解释

  1. (?:"[^"]*?"|[^"‘’])*

    • 匹配两种内容:完整的双引号包裹文本("[^"]*?"),或非双引号、非单引号的普通文本([^"‘’])
    • 重复匹配直到定位到目标左单引号的位置
  2. ‘

    • 匹配目标孤立左单引号
  3. (?:(?!’[A-Za-z]|["‘’]))*

    • 匹配任意字符,只要该字符后不是以下内容:
      • 非缩写的右单引号:’后接非字母(排除缩写场景)
      • 右双引号、左单引号(终止条件)
    • 确保当前左单引号后没有有效的匹配右单引号
  4. (?=["‘’]|$)

    • 正向环视,确保当前位置后是右双引号、左单引号或行尾,符合孤立左单引号的终止规则

测试验证

针对提供的测试用例,上述正则可准确匹配所有符合定义的孤立左单引号,例如:

  • 双引号外场景:一些文本和"双引号" 以及一个‘孤立左单引号中的‘
  • 双引号内场景:"双引号, 内部包含一个‘孤立左单引号。"中的‘
  • 含缩写的场景:一些文本和一个‘孤立左单引号和一个’缩写词中的‘

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:34:51