0

如何检测一个单词中是否存在两个以上的连续字符并删除该单词?

我似乎可以这样做:

# example data
mystring <- c(1, 2, 3, "toot", "tooooot")
# clunky regex
gsub("^[[:alpha:]]$", "", gsub(".*(.)\\1+\\1", "", mystring)) 
[1] "1"    "2"    "3"    "toot" "" 

但我确信有一种更有效的方法。我怎么能只用一个gsub呢?

4

3 回答 3

4

像这样组合表达式:

gsub("^[[:alpha:]]*([[:alpha:]])\\1\\1[[:alpha:]]*$", "", mystring)
于 2013-04-30T07:17:46.087 回答
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 次或更多。

于 2013-04-30T07:23:39.470 回答
0

另一种可能性:

mystring[grepl("(.{1})\\1{2,}", mystring, perl=T)] <- ""
于 2013-04-30T07:31:49.353 回答