![正则表达式:替换单引号但注意撇号](https://linux22.com/image/1606420/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%EF%BC%9A%E6%9B%BF%E6%8D%A2%E5%8D%95%E5%BC%95%E5%8F%B7%E4%BD%86%E6%B3%A8%E6%84%8F%E6%92%87%E5%8F%B7.png)
(我确信这个问题已经有人问过了,但我找不到它。)
我需要将单引号之间的所有内容替换为\enquote{}
,将捕获的内容放在花括号内。使用双引号,我可以这样做:
- 寻找:
"(.*?)"
- 代替:
\\enquote{$1}
但是单引号存在明显的撇号问题。有办法解决这个问题吗?
例子:
He said, 'it's always sunny here.'
答案1
一种多步骤方法:
- 使用搜索和替换,“全部替换”以替换
space+'
为
适当的内容(例如空格+“) - 重复 .1
'+space
。 - 您可能还必须
'.
处理......
(例如,'
在句子末尾,以及在行末 -
以及在行首如何?) - 现在使用搜索和替换来替换
'
剩余"
的
实例并手动选择是否替换(是/否)。
要让这个与自动化流程一起工作吗?
这至少有点困难,我对此非常感兴趣...
如果你能找到一种方法来用正则表达式表达上面的搜索项(即$ 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
屏幕截图(之前):
屏幕截图(之后):