如何使用gsub()在前面添加一个字符串并同时从末尾删除一个字符串?

时间:2014-09-17 17:26:29

标签: regex r gsub

我想将给定字符串的结尾与某个模式匹配。如果有模式,那么我想删除它并在给定字符串的前面添加一个字符串。

例如:如果我有gradesmeanA且模式为meanA,那么我想添加" A类"的意思在gradesmeanA的前面,并在结尾删除meanA。所以结果应该是"意味着A级成绩"。

我想使用gsub()和正则表达式。我想一步到位。

我尝试了什么:

s1<-gsub(pattern="/\\w /meanA$",replacement="mean of class A / \\w/","gradesmeanA")

但没有工作。

1 个答案:

答案 0 :(得分:8)

您可以尝试以下代码,

> s <- "gradesmeanA"
> sub("^(.*?)meanA$", "mean of class A \\1", s, perl=T)
[1] "mean of class A grades"
> sub("^(.*)meanA$", "mean of class A \\1", s)
[1] "mean of class A grades"

模式说明:

  • ^匹配一行的开头。
  • ()捕获组通常用于捕获角色。
  • (.*)meanA$,捕获最后一个字符串meanA之前的所有字符,并匹配最后一个meanA
  • 在sub或gsub中,必须替换所有匹配的字符。在我们的例子中,所有匹配的字符(整行)被mean of class A以及组索引1中存在的字符替换。
  • $匹配一行的结尾。

一个丑陋的人,

> gsub("^(.*?)(mean)(A)$", "\\2 of class \\3 \\1", s, perl=T)
[1] "mean of class A grades"