【问题标题】:Is there a way in R to replace a pattern only if it is preceded by letter?只有在模式前面有字母时,R 中有没有办法替换模式?
【发布时间】:2022-07-22 23:33:03
【问题描述】:

我有一个字符串(更准确地说是一个查询),我需要在 '' 之间的所有单词的末尾添加一些字符(“\n”)。问题是我的字符串算法包含''之间的数字,它们应该保持不变。字符串开头的简化版本如下:

"SELECT CASE WHEN V1 = '1' THEN 'word' WHEN V1 = '3' THEN 'another word' END"

替换后的预期结果是:

"SELECT CASE WHEN V1 = '1' THEN 'word\n' WHEN V1 = '3' THEN 'another word\n' END"

我尝试使用 gsub 函数,但我不知道如何使它按我需要的方式工作。如果我使用:

gsub("' ", "\n' ", string)

数字也被替换。或者如果我使用:

gsub("[a-z]' ", "\n' ", string)

我最终删除了单词的最后一个字母。

我在这里错过了一个明显的解决方案吗?我对编程很陌生,所以如果可能的话,我很感激一些帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    将后跟' 的字母捕获为组((...)),然后使用替换中捕获的组的反向引用(\\1)。在 OP 的帖子中,该字母已匹配,但未被捕获,因此在输出中被删除

    gsub("([A-Za-z]') ", "\\1\n ", string)
    [1] "SELECT CASE WHEN V1 = '1' THEN 'word'\n WHEN V1 = '3' THEN 'another word'\n END"
    

    数据

    string <- "SELECT CASE WHEN V1 = '1' THEN 'word' WHEN V1 = '3' THEN 'another word' END"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-02
      • 2018-12-23
      • 2011-12-26
      • 1970-01-01
      • 2011-08-15
      • 2017-08-12
      • 2019-05-15
      • 2010-10-25
      相关资源
      最近更新 更多