正则表达式替换具有两个以上连续字符的单词

时间:2013-04-30 07:13:33

标签: regex string r character

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

我似乎能够这样做:

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

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

3 个答案:

答案 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)] <- ""