R gsub返回不正确的数据

时间:2013-10-21 19:53:42

标签: regex r vector gsub

我是使用R的新手,我在使用gsub正确格式化列表方面遇到了问题。我需要做两次更换。

  • 首次替换@之后用@mydomain.com
  • 替换所有内容
  • 第二次替换将所有www.替换为空值。
  

更新

我目前正在运行gsub两次并使用我的代码进行更正。我有太多gsub实例,我没有看到。

vec <- c('john@mail.com', 'mike@mail.com', 'robbie.b@yahoo.com', 
         'zack.l.harris@aol.com', 'www.google.com', 'www.gmail.com', 
         'www.domain.com', 'www.example.com')

vec <- gsub("@.*\\.com", "@mydomain.com", vec)
vec <- gsub("www\\.", "", vec)

print(vec)
  

更新

但我想将gsub作为一个实例同时替换两个实例

1 个答案:

答案 0 :(得分:4)

我完成此操作的一种方法是,您可以将gsub个功能级联起来。

vec <- gsub('@[^.]*\\.[^.]*', '@mydomain.com', gsub('www\\.', '', vec))
print(vec)

另一种解决方案是为 old values replacement values

创建向量
re  <- c('@[^.]*\\.[^.]*', 'www\\.')
val <- c('@mydomain.com',  '')

recurse <- function(pattern, repl, x) {
    for (i in 1:length(pattern))
       x <- gsub(pattern[i], repl[i], x)
       x
}

vec <- c('john@mail.com', 'mike@mail.com', 'robbie.b@yahoo.com', 
         'zack.l.harris@aol.com', 'www.google.com', 'www.gmail.com', 
         'www.domain.com', 'www.example.com')

print(recurse(re, val, vec))

输出

"john@mydomain.com"          "mike@mydomain.com"         
"robbie.b@mydomain.com"      "zack.l.harris@mydomain.com"
"google.com"                 "gmail.com"                 
"domain.com"                 "example.com"