R字符串匹配和替换

时间:2019-02-20 00:15:32

标签: r regex

从字符串-theta[0] * x[0] * x[4] -theta[1] * x[1]开始,我想捕获theta[.]并替换为exp(theta[.]),得到的最终结果为:

-exp(theta[0]) * x[0] * x[4] -exp(theta[1]) * x[1]

如何在R中完成此操作?

我尝试通过在a之间进行匹配来进行以下测试:

p <- c("abba", "abcdab")                                                      
gsub("\\(a[^a]*a\\)", "|\\1|", p)

我希望输出为

|abba|
|abcda|b

但是输出是

[1] "abba"   "abcdab"

达到所需结果的正确正则表达式是什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

我们可能会使用

gsub("(theta\\[\\d+\\])", "exp(\\1)", "-theta[0] * x[0] * x[4] -theta[1] * x[1]")
# [1] "-exp(theta[0]) * x[0] * x[4] -exp(theta[1]) * x[1]"

它将theta[.]与任意位数的.匹配,并将其替换为exp(theta[.])

您的尝试很好,您只需要转义括号即可,因为它们表示您以后要引用的组:

gsub("(a[^a]*a)", "|\\1|", p)
# [1] "|abba|"   "|abcda|b"