如何检测一个单词中是否存在两个以上的连续字符并删除该单词?
我似乎可以这样做:
# example data
mystring <- c(1, 2, 3, "toot", "tooooot")
# clunky regex
gsub("^[[:alpha:]]$", "", gsub(".*(.)\\1+\\1", "", mystring))
[1] "1" "2" "3" "toot" ""
但我确信有一种更有效的方法。我怎么能只用一个gsub
呢?
像这样组合表达式:
gsub("^[[:alpha:]]*([[:alpha:]])\\1\\1[[:alpha:]]*$", "", mystring)
你可以grepl
改用。
mystring <- c(1, 2, 3, "toot", "tooooot", "good", "apple", "banana")
mystring[!grepl("(.)\\1{2,}", mystring)]
## [1] "1" "2" "3" "toot" "good" "apple" "banana"
** 解释**
\\1
匹配第一组(在这种情况下(.)
)。{2,}
指定前面的字符应至少匹配 2 次或更多。由于我们要匹配任何重复 3 次或更多(.)
的字符 - 第一次出现,\\1
需要匹配 2 次或更多。
另一种可能性:
mystring[grepl("(.{1})\\1{2,}", mystring, perl=T)] <- ""