对于你们所有人来说都有点奇怪的问题 - 我已经解决了希望替换字符串中所有重复字符的问题,但我并不真正理解我的解决方案。实例是:gsub - 将所有重复字符减少为一个实例
txt <- "haarbbbbbbijjjjjan"
gsub("([a-z])\\1+", "\\1", txt)
[1] "harbijan"
这只是匹配每个字母的所有重复实例(Search搜索词句的长期重复+),并与搜索字母代替他们呢?或者这是在做一些我无法完全理解的意外事件?
对于你们所有人来说都有点奇怪的问题 - 我已经解决了希望替换字符串中所有重复字符的问题,但我并不真正理解我的解决方案。实例是:gsub - 将所有重复字符减少为一个实例
txt <- "haarbbbbbbijjjjjan"
gsub("([a-z])\\1+", "\\1", txt)
[1] "harbijan"
这只是匹配每个字母的所有重复实例(Search搜索词句的长期重复+),并与搜索字母代替他们呢?或者这是在做一些我无法完全理解的意外事件?
您已声明一个组 - a
和z
之间的任何符号。 \\1
引用此组。该组的任何重复次数都被代入组值。例如,如果组为a
,则任何数量的a
将被组值替换,例如,与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没有改变。如上所示,你可以替换[[:alpha:]]通过[a-zA-KM-Z]或类似的任意组合,甚至在squre括号[y | Q]中使用“或”运算符,如果你想让你的代码只影响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-1,}
。 如果您想要替换该重复次数仅为(例如)该字符,请在替换中使用"\\1\\1"
。
谢谢 - 解释非常方便! – thelatemail 2012-03-05 06:42:03
@Andrew Logninov,如果您想要替换连续出现两次以上重新排列的字母,这种情况会有何变化。例如,我想用''r''替换''rrr',但保持''rr''不变?谢谢。 – Nestorghh 2012-06-27 19:57:41
@Nestorghh我不知道你在用什么语言,但总的来说,这应该看起来像这样:'substitute('r {3,}','r',)''。 –
2012-06-27 20:13:20