正则表达式:替换单引号但注意撇号

正则表达式:替换单引号但注意撇号

(我确信这个问题已经有人问过了,但我找不到它。)

我需要将单引号之间的所有内容替换为\enquote{},将捕获的内容放在花括号内。使用双引号,我可以这样做:

  • 寻找:"(.*?)"
  • 代替:\\enquote{$1}

但是单引号存在明显的撇号问题。有办法解决这个问题吗?

例子:

He said, 'it's always sunny here.'

答案1

一种多步骤方法:

  1. 使用搜索和替换,“全部替换”以替换space+'
    适当的内容(例如空格+“)
  2. 重复 .1 '+space
  3. 您可能还必须'.处理......
    (例如,'在句子末尾,以及在行末 -
    以及在行首如何?)
  4. 现在使用搜索和替换来替换'剩余"
    实例并手动选择是否替换(是/否)。

要让这个与自动化流程一起工作吗?
这至少有点困难,我对此非常感兴趣...

如果你能找到一种方法来用正则表达式表达上面的搜索项(即$ man re_format),那么你可能至少已经部分实现了自动化。
https://www.regular-expressions.info/wordboundaries.html可能会有所帮助,但我认为\b并非所有正则表达式实现都提供此功能。

答案2

由于您没有提供您使用的语言/工具,我给出了使用 Notepad++ 的解决方案。

  • Ctrl+H
  • 找什么:\w'\w(*SKIP)(*FAIL)|'(.+?)'(?!\w)
  • 用。。。来代替:\\enquote{$1}
  • 查看 环绕
  • 查看 正则表达式
  • 查看 . matches newline*
  • Replace all

解释:

  \w            # 1 word character
  '             # single quote (in fact an apostrophe)
  \w            # 1 word character
  (*SKIP)       # skip this match
  (*FAIL)       # abort this match (don't considere the apostrophe)
|               # OR
  '             # single quote
  (.+?)         # group 1, 1 or more any character, not greedy
  '             # single quote
  (?!\w)        # only if not followed by a word character

屏幕截图(之前):

在此处输入图片描述

屏幕截图(之后):

在此处输入图片描述

相关内容