我有一个字符串如下:
text <- "http://x.co/imag/xyz.png,http://x.co/imag/xyz.png,http://x.co/imag/xyz.png,http://x.co/imag/jpg.png"
我想消除所有重复的地址,所以我的预期结果是:
expected <- "http://x.co/imag/xyz.png,http://x.co/imag/jpg.png"
我在 regex101.com 中尝试了 (^[\w|.|:|\/]*),\1+
并且它可以删除字符串的第一次重复(在第二次失败).但是,如果我将它移植到 R 的 gsub
,它不会按预期工作:
gsub("(^[\\w|.|:|\\/]*),\\1+", "\\1", text)
我已经尝试使用 perl = FALSE
和 TRUE
无济于事。
我做错了什么?
最佳答案
如果它们是连续的,你只需要稍微修改你的正则表达式。
取出你的 BOS anchor ^
。
在逗号和反向引用周围添加一个簇组,然后对其进行量化(?:,\1)+
。
并且,去掉管道符号 |
,因为在类中它只是一个文字。
([\w.:/]+)(?:,\1)+
https://regex101.com/r/FDzop9/1
( [\w.:/]+ ) # (1), The adress
(?: # Cluster
, \1 # Comma followed by what found in group 1
)+ # Cluster end, 1 to many times
注意 - 如果您使用 split 和 unique 然后组合,您将失去顺序 的项目。
关于在 R 中使用正则表达式替换重复的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45292105/