【发布时间】:2012-03-05 06:33:53
【问题描述】:
对大家来说一个有点奇怪的问题 - 我已经解决了我希望替换字符串中所有重复字符的问题,但我并不真正理解我的解决方案。例子是:
txt <- "haarbbbbbbijjjjjan"
gsub("([a-z])\\1+", "\\1", txt)
[1] "harbijan"
这只是匹配每个字母的所有重复实例(搜索词+搜索词的重复)并将它们替换为搜索到的字母吗?或者这是在做一些我没有完全理解的意外?
【问题讨论】:
对大家来说一个有点奇怪的问题 - 我已经解决了我希望替换字符串中所有重复字符的问题,但我并不真正理解我的解决方案。例子是:
txt <- "haarbbbbbbijjjjjan"
gsub("([a-z])\\1+", "\\1", txt)
[1] "harbijan"
这只是匹配每个字母的所有重复实例(搜索词+搜索词的重复)并将它们替换为搜索到的字母吗?或者这是在做一些我没有完全理解的意外?
【问题讨论】:
您已经声明了一个组 - a 和 z 之间的任何符号。 \\1 引用该组。该组的任意数量的重复被代入组值。例如,如果组是a,那么任意数量的as 将被替换为组值,例如a。
希望我说清楚了 =)
【讨论】:
r 替换rrr,但保持rr 不变?谢谢。
substitute('r{3,}', 'r', <your_text>)。
R。但我刚刚意识到这段代码完成了gsub('([a-zA-Z]rrr*)\\1+', 'r', mytext) 的工作R 中的substitute 函数似乎执行其他任务。它应该以什么语言运行您的代码?非常感谢。
gsub('r{3,}','r',text)。
如果你想替换至少出现 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] 或类似的任意组合,甚至使用“或”运算符 |如果您希望代码仅影响 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 次相同字符的重复,请使用{n-1,}。
如果您只想将 n 次重复替换为该字符的 2 次(例如),请在替换中使用 "\\1\\1"。
【讨论】: