如何正确替换 R 中匹配模式的一部分?

How to correctly substitute a part of a matching pattern in R?

一个简单的例子。

原始字符向量:

> sats
[1] "G 5" "G 7" "G 9" "G10" "G13" "G16" "G19" "G20" "G27" "G28" "G30"

然后 gsub:

sats=gsub("G ","G0",sats)
> sats
[1] "G05" "G07" "G09" "G10" "G13" "G16" "G19" "G20" "G27" "G28" "G30"

匹配模式是"G "。有没有办法让我只更改 space 的第二个字符,而不是覆盖整个匹配的部分。或者例如在匹配片段的字符之间插入一个字符。我想做的是弄清楚正则表达式工具是如何工作的,而不是解决特定问题。谢谢

看来你问的是如何使用子匹配。

替换 patten 的一部分可以通过 捕获您需要保留的内容并仅匹配您想要替换的内容来完成

参见IDEONE demo

sats <- c("G 5","G 7","G 9","G10","G13","G16","G19","G20","G27","G28","G30")
gsub('([[:alpha:]]+) ', '\10', sats)
##  [1] "G05" "G07" "G09" "G10" "G13" "G16" "G19" "G20" "G27" "G28" "G30"

这里,([[:alpha:]]+) 是一个捕获组(一对未转义的括号),存储在缓冲区 #1 中,我们可以在替换模式中使用 </code> 反向引用调用它。 (请注意 <code>(G) 是一个非常奇怪的例子,这就是为什么我建议 POSIX 字符 class [[:alpha:]] 只匹配大小写字母并添加 + 匹配一次或多次。)