我对正则表达式一点也不熟悉,想用R做模式匹配和替换
我想替换vector中的模式#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)
}
字符串
但我得到
#> original
#[1] "1" "2" "10" "11"
型
而不是:"1" "2" "#10" "#11"
3条答案
按热度按时间li9yvcax1#
指定要匹配从start(
^
)到end($
)的整个字符串。在这里,我已经完全匹配了您在这个示例中看到的条件,但我猜您需要扩展它:
字符串
所以,这基本上是,“从一开始,寻找一个哈希符号,后面跟着确切的数字1或2。1或2应该只是一个数字(这就是为什么我们不使用
*
或+
或其他),也结束字符串。哦,捕获一两个,因为我们想'反向参考'它。e0uiprwp2#
使用
gsubfn
的另一个选项:字符串
或者,如果你想显式地使用你的向量的值,使用vec值:
型
或等效于函数表示法的公式表示法:
型
nfzehxib3#
这里有一个稍微不同的例子,它使用了 * 零宽度负前瞻Assert *(真拗口!)。这是
(?!...)
,它匹配字符串开头的#
,只要它后面没有...
中的任何内容。在这种情况下,两个(或等同地,只要它们是连续的)数字。它用什么都没有取代它们。字符串