我对正则表达式一点都不熟悉,想在R中进行模式匹配和替换.
我想更换模式#1,#2在该载体:original = c("#1", "#2", "#10", "#11")与所述向量的每个值vec = c(1,2).
我正在寻找的结果是以下向量:c("1", "2", "#10", "#11")
我不知道该怎么做.我试过做:
for(i in 1:2) {
pattern = paste("#", i, sep = "")
original = gsub(pattern, vec[i], original, fixed = TRUE)
}
Run Code Online (Sandbox Code Playgroud)
但我得到:
#> original
#[1] "1" "2" "10" "11"
Run Code Online (Sandbox Code Playgroud)
代替: "1" "2" "#10" "#11"
我将不胜感激任何帮助!谢谢!
指定您匹配从start(^)到end($)的整个字符串.
在这里,我完全符合你在这个例子中看到的条件,但我猜你需要扩展它:
> gsub("^#([1-2])$", "\\1", original)
[1] "1" "2" "#10" "#11"
Run Code Online (Sandbox Code Playgroud)
所以,这是基本,"从一开始,寻找一个散列符号后接的确切数量一个或两个.在一个或两个应该只是一个数字(这就是为什么我们不使用*或+什么的),也结束哦,并抓住那一两个,因为我们想"反对"它."
另一种选择使用gsubfn:
library(gsubfn)
gsubfn("^#([1-2])$", I, original) ## Function substituting
[1] "1" "2" "#10" "#11"
Run Code Online (Sandbox Code Playgroud)
或者,如果您想显式使用向量的值,请使用 vec 值:
gsubfn("^#[1-2]$", as.list(setNames(vec,c("#1", "#2"))), original)
Run Code Online (Sandbox Code Playgroud)
或者等价于函数表示法的公式表示法:
gsubfn("^#([1-2])$", ~ x, original) ## formula substituting
Run Code Online (Sandbox Code Playgroud)