如何检测单词中是否存在两个以上的连续字符并删除该单词?
我似乎能够这样做:
# example data
mystring <- c(1, 2, 3, "toot", "tooooot")
# clunky regex
gsub("^[[:alpha:]]$", "", gsub(".*(.)\\1+\\1", "", mystring))
[1] "1" "2" "3" "toot" ""
但我确信有一种更有效的方法。我怎么能只用一个gsub
?
答案 0 :(得分:4)
结合如下表达式:
gsub("^[[:alpha:]]*([[:alpha:]])\\1\\1[[:alpha:]]*$", "", mystring)
答案 1 :(得分:4)
您可以改为使用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次以上。
答案 2 :(得分:0)
另一种可能性:
mystring[grepl("(.{1})\\1{2,}", mystring, perl=T)] <- ""