R:如何将字符串的一部分转换为变量名并在同一个字符串中返回其值?

时间:2015-03-28 22:20:58

标签: regex r variables

假设我有一个字符串marco <- 'polo'。有什么方法可以将marco嵌入到另一个字符串的中间,例如x <- 'John plays water marco.'x返回'John plays water polo.'

修改

大卫亲切地提出的解决方案确实适用于我上面发布的假设问题,但我试图得到的是:

data <- c('kek','koki','ukak','ikka')

V <- c('a|e|i|o|u')

如何删除解决方案可以管理的所有元音(gsub(V,'',data)),而不是指定两个k之间的所有元音?显然gsub('kVk','',data)不起作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

如果你想删除两个“k”字母之间的所有元音,我建议如下:

V <- '[aeiou]'
data <- c('kek', 'koki', 'ukak', 'ikka', 'keeuiokaeioukaeiousk')
gsub(paste0('(?:\\G(?!^)|[^k]*k(?=[^k]+k))\\K', V), '', data, perl=T)
# [1] "kk"    "kki"   "ukk"   "ikka"  "kkksk"

\G功能是一个可以在两个位置之一匹配的锚点;字符串位置的开头或最后一个匹配结束时的位置。 \K重置报告的匹配的起始点,并且不再包括任何先前消耗的字符,这类似于lookbehind。

Regular Expression Explanation

答案 1 :(得分:0)

或者,使用给定的示例:

V <- 'a|e|i|o|u'  ## or equivalently '[aeiou]'
dd <- c('kek','koki','ukak','ikka','kaaaak')
gsub(paste0("k(",V,")+k"),"kk",dd)
## [1] "kk"   "kki"  "ukk"  "ikka" "kk"

我猜你可能(?)想要在k之间删除多个元音;我在正则表达式中添加了+来执行此操作。