2017-08-03 82 views
-1

我正在嘗試使用regex和後面的引用來執行某些操作,這些引用涉及到抓取沒有函數的字符串,並將它們放在f(x)函數中。R:使用gsub捕獲沒有匹配的反向引用

a <- c("x(1)","y(212)", "z(b)","234", "cd") 

gsub("solution", "f\\(\\1\\)", a) 
# "x(1)" "y(212)" "z(b)" "f(234)" "f(cd)" 

# Naively I have tried the following: 
gsub("(.*)&[^(*.\\(.*\\))]", "f\\(\\1\\)", a) 
gsub("(.*)&[!(*.\\(.*\\))]", "f\\(\\1\\)", a) 
gsub("(.*)&(!(*.\\(.*\\)))", "f\\(\\1\\)", a) 
+1

這是您想要的嗎? 'gsub(「^([^)])+ $」,「f(\\ 1)」,a)' – MrFlick

回答

2

您可以匹配並捕獲不包含圓括號的字符串,然後用f()包裝它;對於確實有圓括號的字符串,由於它們不符合模式,因此它們將保持原樣:

sub("^([^()]+)$", "f(\\1)", a) 
# [1] "x(1)" "y(212)" "z(b)" "f(234)" "f(cd)"