我有一个字符串表达式,如下所示:
orig <- "mean(Sepal.Length, na.rm = TRUE)"
orig
#> [1] "mean(Sepal.Length, na.rm = TRUE)"
我想重新排列这个字符串,以便得到以下输出:
"Sepal.Length$mean(na.rm = TRUE)"
#> [1] "Sepal.Length$mean(na.rm = TRUE)"
我知道我可以像这样使用捕获组:
gsub("(Sepal.Length)", "\\1\\$", orig)
#> [1] "mean(Sepal.Length$, na.rm = TRUE)"
但这不适用于移动字符串中的文本:
gsub("(Sepal.Length)(.*)", "\\1\\$\\2", orig)
#> [1] "mean(Sepal.Length$, na.rm = TRUE)"
This question是有用的,但那里的解决方案是硬编码的,而这里我根本不知道我将拥有的表达式,只是它将包含Sepal.Length
。例如,上面的表达式可以是"sum(Sepal.Length)"
。
我在寻找一个解决方案在基地R。
3条答案
按热度按时间slhcrj9b1#
您可以使用以下模式:
(.+)
匹配第一个括号\\(
之前的任何内容;.
是一个特殊字符,所以要使用文字点,需要\\.
;,? *
(?
表示“0或1次”,*
表示“0或更多次”);(.*)
,后跟右括号\\)
。编辑:感谢@rps1227提出的改进建议。
hpxqektj2#
解析表达式给出
p
,在这种情况下,p2在第一个例子中是Sepal.Length
,但可以是其他的东西,如第二个例子。然后将p转换为一个列表,并将第二个元素(第一个例子中的Sepal.Length)转换为NULL,然后将其转换为一个调用对象,再从调用对象转换为字符串。最后将p2粘贴到它的前面,使用$作为分隔符。不使用任何包或正则表达式,并且它与第一个参数名称是Sepal.Length
还是其他名称无关。46qrfjad3#
如果你事先知道
"Sepal.Length"
,那么你不需要regex把它贴在前面,你可以在那里paste
: