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

时间:2015-12-27 14:47:07

标签: regex r substitution

一个简单的例子。

原始字母矢量:

> 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”。有没有办法让我只改变作为空格的第二个角色,而不是覆盖整个匹配的棋子。或者例如在匹配的片段中的字符之间插入字符。我想要做的是弄清楚正则表达式工具是如何工作而不是解决特定问题。感谢。

1 个答案:

答案 0 :(得分:0)

您似乎在询问如何使用子匹配。

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

请参阅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中的捕获组(未转义的括号中的一对),我们可以在替换模式中使用\1反向引用来调用它。 (注意(G) 是一个非常奇怪的例子,这就是为什么我建议只匹配小写和大写字母的POSIX字符类[[:alpha:]]并添加一个匹配一个或多个匹配项的+ 。)