对你们一个有点奇怪的问题 - 我已经解决了我希望替换字符串中所有重复字符的问题,但我并不理解我的解决方案。例如:
txt <- "haarbbbbbbijjjjjan"
gsub("([a-z])\\1+", "\\1", txt)
[1] "harbijan"
这只是匹配每个字母的所有重复实例(搜索字词+搜索字词的重复)并将其替换为搜索到的字母吗?或者这是否是我无法完全掌握的无意识的事情?
答案 0 :(得分:7)
您已宣布一个群组 - a
和z
之间的任何符号。 \\1
引用此群组。该组的任意数量的重复被代入组值。例如,如果组是a
,则任意数量的a
将被替换为组值,例如与a
。
希望我明白自己=)
答案 1 :(得分:0)
如果你想替换至少出现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的重复,则在squre括号内[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,}
。
如果您想仅用 2 次(例如)该字符替换该n次重复,请在替换中使用"\\1\\1"
。