【问题标题】:Change `"` quotation marks to latex style将`"`引号改为latex样式
【发布时间】:2014-03-04 13:38:32
【问题描述】:

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

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

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

但这显然是错误的,因为

"quoted text here"

会变成

``uoted text here" 

我该如何解决我的问题?

【问题讨论】:

  • 我对你的方法有点困惑。 s/``/"[a-z]/g 不应该反过来吗?但是,我认为它会更好:s/``(.*?)''/"\1"/g
  • @Jerry 转换是从“..”到“..”
  • 我认为有些人(包括我)感到困惑的原因是因为您没有在问题中使用内联代码格式(反引号)。在等宽字体中,很容易看出最后的“引号”实际上是两个撇号(''),但我看到的只是"

标签: regex tex


【解决方案1】:

我对你的方法有点困惑。 s/``/"[a-z]/g 不应该反过来吗?但是,我认为这样会更好:

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

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

\1 包含此捕获。


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

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

它的工作原理与之前的正则表达式相同。

【讨论】:

    【解决方案2】:

    使用以下方法处理多个引用,一步替换所有"

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

    [^\"]* 避免了不贪婪的匹配,which does not seem possible in sed

    【讨论】:

    • 在处理转义的"" 的其他不作为引号的出现时要小心,例如如"Quote" she said na\"ively, "again."。这些都是派对大便。
    【解决方案3】:

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

    "([^}]*)"
    

    进入替换字段:

    ``$1''
    

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

    【讨论】:

      【解决方案4】:

      尝试对单词进行分组:

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

      在我的电脑上:

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

      【讨论】:

        【解决方案5】:

        这在一定程度上取决于您的输入文件(引号总是成对出现,还是可以省略?)。我建议采用以下稳健的方法:

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

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 2017-06-08
            • 1970-01-01
            • 2010-09-25
            • 1970-01-01
            • 1970-01-01
            • 2013-05-26
            • 1970-01-01
            • 1970-01-01
            • 2019-05-17
            相关资源
            最近更新 更多