我正在使用$scope.changeApplication = function(name) {
$scope.currentApplication = name;
};
中的regex
重新格式化字符串,并且我尝试删除空格,以防找不到单词。
r
结果一般都有效,但如果找不到sub('^log2\\.Ratio\\.(.)\\.(.)\\.(normalized)?.*',
'log2(\\3 Ratio \\1/\\2)',
c('log2.Ratio.M.L.normalized.for','log2.Ratio.M.L.rev'))
这个词,我会得到额外的空格。
normalized
有谁知道如何让"log2(normalized Ratio M/L)" "log2( Ratio M/L)"
背后的空间有条件?
答案 0 :(得分:3)
R regexes不支持条件替换字符串(如Boost,例如,您可以在Notepad ++中使用条件替换)。但是,您可以使用gsubfn
并在回调部分中使用自定义替换逻辑:
library(gsubfn)
x <- c('log2.Ratio.M.L.normalized.for','log2.Ratio.M.L.rev')
rx <- '^log2\\.Ratio\\.(.)\\.(.)\\.(normalized)?.*'
gsubfn(rx, function(x, y, z)
ifelse(nchar(z)>0,
paste0("log2(",z," Ratio ",x,"/",y, ")"),
paste0("log2(Ratio ",x,"/",y,")")),
x)
## => [1] "log2(normalized Ratio M/L)" "log2(Ratio M/L)"
下面:
ifelse(nchar(z)>0
- 检查第3组(normalized
)是否匹配paste0("log2(",z," Ratio ",x,"/",y, ")")
- 如果是,请使用'log2(\\3 Ratio \\1/\\2)'
paste0("log2(Ratio ",x,"/",y,")")
- 否则,请使用'log2(Ratio \\1/\\2)'
替换方案。 x
代表\\1
,y
代表\\2
,z
代表\\3
。
答案 1 :(得分:1)
我们可以paste
log2(
子字符串
paste0("log2(", trimws(sub("^log2\\.Ratio\\.(.)\\.(.)\\.*(normalized)?.*",
"\\3 Ratio \\1/\\2)", str1)))
#[1] "log2(normalized Ratio M/L)" "log2(Ratio M/L)"