在 R 中使用正则表达式替换重复的字符串

标签 r regex gsub

我有一个字符串如下:

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 = FALSETRUE 无济于事。

我做错了什么?

最佳答案

如果它们是连续的,你只需要稍微修改你的正则表达式。

取出你的 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/

相关文章:

regex - R - gsub 替换反斜杠

ruby - ruby 字符串中选定字符替换的所有可能组合

r - ggplot2: ..count.. 不再使用 stat_bin_hex

c# - 用哈希表中的值替换占位符

regex - 使用正则表达式检查字符串是否有效

javascript - 匹配并不总是在一起的特定 URL 参数

用R中的部分文件名替换主题ID

mysql - 如何将地理空间数据从 MySQL 读取到 R 中?

r - 使用 xts/zoo R 绘制一天中不同时间的值

r - 在数据框中的特定位置添加列的优雅方式