我使用R而我有一个带有1和2的字符串向量。
字符串示例如下:
"11111111******111"
"11111111111***2222222"
"1111*****22222**111*****1111"
其中"*"
表示差距。
我有兴趣删除短于某个数字 n 的差距子串。
以上序列的示例:
我决定 n = 3,所以......
1. "11111111******111"
2. "111111111112222222"
3. "1111*****22222111*****1111"
在第二和第三个字符串中,"功能"删除了3个间隙和2个间隙的子串,因为我想删除所有间隔短于或等于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"