修改正则表达式匹配的子串并放回原处

Oga*_*anM 2 regex r

我有一个任意字符串,比如“1a2 2a1 3a2 10a5”

我可以相对轻松地提取我想要的数字

string = "1a2 2a1 3a2 10a5"
numbers = stringr::str_extract_all(string,'[0-9]+(?=a)')[[1]]
Run Code Online (Sandbox Code Playgroud)

显然,将它们加倍是微不足道的

numbers = 2*(as.integer(numbers))
Run Code Online (Sandbox Code Playgroud)

但是我在将新结果放在旧位置时遇到了问题。得到输出“2a2 4a1 6a2 20a5”。我觉得应该有一个单一的功能来完成这个,但我能想到的就是使用gregexpr并手动将新结果记录在坐标中的匹配的原始索引。

Ron*_*hah 6

我们可以使用str_replace_allfromstringr来捕获数字"a",然后在它们的回调函数中将它们乘以 2。

stringr::str_replace_all(string, "\\d+(?=a)", function(m) as.integer(m) * 2)
#[1] "2a2 4a1 6a2 20a5"
Run Code Online (Sandbox Code Playgroud)

  • 整洁(+1)。我正在摸索“str_split”。 (2认同)