将```引号改为乳胶风格

时间:2014-03-04 13:38:33

标签: regex tex

我在LaTeX中编辑一本书,它的引号语法与简单的"字符不同。所以我想将"quoted text here"转换为``quoted text here''

我有50个文本文件,里面有很多引号。我尝试编写正则表达式,用"替换第一个``,用"替换第二个'',但我失败了。我在互联网上搜索并问了一些朋友,但我根本没有成功。我最接近第一个引号的是

s/"[a-z]/``/g

但这显然是错误的,因为

"quoted text here"

将成为

``uoted text here" 

如何解决我的问题?

6 个答案:

答案 0 :(得分:3)

我对你的方法感到有些困惑。不应该与s/``/"[a-z]/g相反吗?但是,我认为它会更好:

s/``(.*?)''/"\1"/g

(.*?)捕获``''之间的内容。

\1包含此捕获。


如果你正在寻找的是相反的(即我错误地解释了你的问题),那么我会建议:

s/"(.*?)"/``\1''/g

其原理与前一个正则表达式相同。

答案 1 :(得分:1)

使用以下内容处理多个引文,一步替换所有"

echo '"Quote" she said, "again."' | sed "s/\"\([^\"]*\)\"/\`\`\1''/g"

[^\"]*避免了不合理匹配的需要which does not seem possible in sed

答案 2 :(得分:1)

如果您使用的是 TeXmaker 软件,您可以使用带有 Replace 命令 (CTRL+R) 的正则表达式,并将以下内容放入 查找字段:

"([^}]*)"

并进入替换字段:

``$1''

然后只需按下全部替换按钮。但在那之后,你仍然要检查一切是否正常,也许你需要做一些更正。这对我来说效果很好。

答案 3 :(得分:0)

尝试对单词进行分组:

sed 's/"\([a-z]\)/``\1/'

在我的电脑上:

abhishekm71@PC:~$ echo \"hello\" | sed 's/"\([a-z]\)/``\1/'
``hello"

答案 4 :(得分:0)

这取决于您的输入文件(引号总是配对,还是可以省略?)。我建议采用以下强有力的方法:

sed 's/"\([0-9a-zA-Z]\)/``\1/g'
sed "s/\([0-9a-zA-Z]\)\"/\1\'\'/g"

假设:开头的引号后面总是紧跟一个字母或数字,一个右引号前面加一个。报价可以跨越几个单词甚至几个输入行(其他一些解决方案在发生这种情况时不起作用)。

请注意,我也会替换右引号:根据您使用的字体,双引号可以排版为中性直引号。

答案 5 :(得分:0)

您正在寻找包含在直引号中的内容不包含引号,因此最好的正则表达式是 "([^"]*?)"。将其替换为 ``\1''。在 Perl 中,这可以简化为 s/"([^"]*?)"/``\1''/g。我会非常小心这种方法,它只有在所有左引号都有匹配的右引号时才有效,例如在 "one" two "three" four 中。但它会在 "one" t"wo "three" four 生成 ``one'' t``wo ''three" 时失败。