删除R中逗号后的前4个字符

时间:2018-07-26 10:52:34

标签: r regex gsub

我有一个带有行的向量,例如:

/en/house/125,/en/house/145,/en/house/06
/en/house/45,/fr/house/22,/fr/house/34

我想删除/ en /,/ fr /等,因为知道有24种2字母的可能性。换句话说,我想删除一行的前4个字符,并且每当该行中有一个逗号时就删除前4个字符(我保留逗号)。 第一个很简单,我刚刚使用过:

apply(vectorA, 2, function(x)gsub('\\s+','',x))

但是对于逗号后面的那个似乎不太明显。 有谁知道如何轻松地实现该功能?

预期输出应为:

house/125,house/145,house/06
house/45,house/22,house/34

2 个答案:

答案 0 :(得分:3)

stringr::str_replace_all怎么样?

"/en/house/125,/en/house/145,/en/house/06" -> string
stringr::str_replace_all(string, "/[a-z]{2}/", "")

这将产生:

[1] "house/125,house/145,house/06"

这假定两个正斜杠之间的所有标签的长度均为两个字符且均为小写。

答案 1 :(得分:2)

实际上,您只需要在字符串的开头或逗号后替换/[a-z]{2}/

您需要以下正则表达式:

(^|,)/[a-z]{2}/

并替换为\1反向引用,如果捕获组与之匹配,它将回退逗号。参见regex demo

详细信息

  • (^|,)-第1组(在替换模式中后来称为\1替换后向引用):字符串的开头(^或(|)以逗号开头
  • /-斜杠
  • [a-z]{2}-两个小写ASCII字母
  • /-斜线。

请参见online R demo

x <- c("/en/house/125,/en/house/145,/en/house/06", "/en/house/45,/fr/house/22,/fr/house/34", "/es/do/45,/ro/nu/22,/ja/hs/34")
gsub("(^|,)/[a-z]{2}/", "\\1", x)
## => [1] "house/125,house/145,house/06" 
##    [2] "house/45,house/22,house/34"  
##    [3] "do/45,nu/22,hs/34"