【问题标题】:gsub every other occurrence of a conditiongsub 每隔一个条件出现一次
【发布时间】:2012-08-14 01:42:12
【问题描述】:

有时我使用 R 从 pdf 中解析文本以获取撰写文章时的引号(我使用 LATEX)。我想做的一件事是将左右直引号更改为 LATEX 样式的左右引号。

LATEX 会将 "dog" 更改为 ``dog''(所以两个 ` 用于左侧,两个 ' 用于右侧)

这是我拥有和想要获得的示例。

#currently
x <- c('I like "proper" cooking.', 'I heard him say, "I want some too" and "nice".')

[1] "I like \"proper\" cooking."   "I heard him say, \"I want some too\" and \"nice\"."

#desired outcome
[1] "I like ``proper'' cooking."   "I heard him say, ``I want some too'' and ``nice''."

编辑: 想我会分享上下文的实际用途。使用 ttmaccer 的解决方案(适用于 windows 机器):

g <- function(){
    require(qdap)
    x <- readClipboard()
    x <- clean(paste2(x, " "))
    zz <- mgsub(c("- ", "“", "”"), c("", "``", "''"), x)
    zz <- gsub("\"([^\"].*?)\"","``\\1''", zz)
    writeClipboard(noquote(zz), format = 1)
}

注意:qdap可以下载HERE

【问题讨论】:

    标签: regex r


    【解决方案1】:

    一个天真的解决方案是:

    > gsub("\"([^\"].*?)\"","``\\1''",x)
    
    [1] "I like ``proper'' cooking."                        
    [2] "I heard him say, ``I want some too'' and ``nice''."
    

    但我不确定你会如何处理"some \"text\" with one \""

    【讨论】:

    • 这行得通。无论如何我都会检查输出,所以我只是在寻找它大部分时间都可以工作(节省时间)。
    【解决方案2】:

    两阶段解决方案:

    第一阶段:使用"((?:[^\\"]|\\.)*)"匹配双引号字符串
    第 2 阶段:使用\\"([^\\"]*)\\" 替换第 1 阶段第 1 组中的\"

    【讨论】:

      猜你喜欢
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      相关资源
      最近更新 更多