删除字符串的多个子字符串

时间:2016-12-14 18:21:18

标签: r substring

我使用R而我有一个带有1和2的字符串向量。

字符串示例如下:

  1. "11111111******111"
  2. "11111111111***2222222"
  3. "1111*****22222**111*****1111"
  4. 其中"*"表示差距。

    我有兴趣删除短于某个数字 n 的差距子串。

    以上序列的示例:

    我决定 n = 3,所以......

    1. "11111111******111"
    2. "111111111112222222"
    3. "1111*****22222111*****1111"
    

    在第二和第三个字符串中,"功能"删除了3个间隙和2个间隙的子串,因为我想删除所有间隔短于或等于3的子串。

3 个答案:

答案 0 :(得分:1)

可能我们可以做到

n <-3
pat <- sprintf("(?<=[0-9])\\*{1,%d}(?=[0-9])", n)
gsub(pat, "", v1, perl = TRUE)
#[1] "11111111******111"          "111111111112222222"         
#[3]  "1111*****22222111*****1111"

数据

v1 <- c("11111111******111", "11111111111***2222222", "1111*****22222**111*****1111")

答案 1 :(得分:0)

与@ akrun的答案相似:

x<- list("11111111******111",
"11111111111***2222222",
"1111*****22222**111*****1111")

lapply(x, function(x) gsub("(\\d)\\*{,3}(\\d)", "\\1\\2", x, perl = TRUE))

答案 2 :(得分:0)

gsub('(?<=\\d)(\\*{1,3})(?=\\d)','',v1,perl=T)
[1] "11111111******111"          "111111111112222222"         "1111*****22222111*****1111"