Regex gsub-将所有重复字符减少为一个实例

Regex gsub-将所有重复字符减少为一个实例,regex,r,gsub,Regex,R,Gsub,对大家来说,这是一个有点奇怪的问题——我已经解决了希望替换字符串中所有重复字符的问题,但我并不真正理解我的解决方案。例如: txt <- "haarbbbbbbijjjjjan" gsub("([a-z])\\1+", "\\1", txt) [1] "harbijan" txt您已声明一个组-介于a和z之间的任何符号\\1引用此组。此组的任何重复次数都将替换为组值。例如,如果组为a,则任何数量的as都将替换为组值,例如,替换为a 希望我说清楚=)如果您想替换至少出现3次的字母(例如),

对大家来说,这是一个有点奇怪的问题——我已经解决了希望替换字符串中所有重复字符的问题,但我并不真正理解我的解决方案。例如:

txt <- "haarbbbbbbijjjjjan"
gsub("([a-z])\\1+", "\\1", txt)
[1] "harbijan"

txt您已声明一个组-介于
a
z
之间的任何符号<代码>\\1
引用此组。此组的任何重复次数都将替换为组值。例如,如果组为
a
,则任何数量的
a
s都将替换为组值,例如,替换为
a


希望我说清楚=)

如果您想替换至少出现3次的字母(例如),下面是我的解决方案(使用
{2,}

gsub("([[:alpha:]])\\1{2,}", "\\1", "Buennaaaa Suerrrtee")
#[1] "Buenna Suertee"
如您所见,4“a”已减少到仅1 a,3 r已减少到1 r,但2 n和2 e未更改。如上所述,您可以使用[a-zA-KM-Z]或类似的任意组合替换[[:alpha:],甚至在方括号[y | Q]内使用“or”运算符如果希望代码只影响y和Q的重复

gsub("([a|e])\\1{2,}", "\\1", "Buennaaaa Suerrrtee")
# [1] "Buenna Suerrrtee"
# triple r are not affected and there are no triple e.
如果要将同一字符的重复次数至少替换为n,请使用
{n-1,}

如果您只想将该n次重复替换为该字符的2次(例如),请使用
“\\1\\1”
在替换中。

谢谢你-解释很方便!@Andrew Logninov,如果你想替换连续重复两次以上的字母,这会发生什么变化。例如,我想用
r
替换
rrr
,但保持
rr
不变?谢谢。@Nestorghh我不知道你使用的是什么语言sing,但总的来说,这应该有点像这样:
substitute('r{3,},'r',)
@AndrewLogvinov我用的是
r
。但我刚刚意识到这个代码完成了工作
gsub('([a-zA-Z]rrr*)\\1+,'r',mytext)
R中的
substitute
函数似乎执行其他任务。它应该用什么语言运行您的代码?非常感谢。@Nestorghh它是伪代码:)您应该尝试
gsub('R{3,}','R',text)