【问题标题】:How to use gsub() to add a string to the front and remove a string from the end at same time?如何使用 gsub() 将字符串添加到前面并同时从末尾删除字符串?
【发布时间】:2014-09-17 17:26:28
【问题描述】:

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

例如:如果我有gradesmeanA 并且模式是meanA,那么我想在gradesmeanA 的前面添加“A 类的平均值”并在最后删除meanA。所以结果应该是“A类成绩的平均值”。

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

我尝试了什么:

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

但没用。

【问题讨论】:

    标签: regex r gsub


    【解决方案1】:

    你可以试试下面的代码,

    > 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"
    

    【讨论】:

    • ?perl=T 可以省略。
    • @Avinash Raj 太好了。能不能解释一下正则表达式部分,让我学习一下。
    • @Vajira - 你也可以得到很好的正则表达式解释here
    • 由于只执行了一次替换,您可以使用sub 函数代替gsub
    • @Richard Scriven 该网站给出了很好的解释。
    猜你喜欢
    • 2010-11-05
    • 2017-08-02
    • 1970-01-01
    • 2019-06-13
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多