如何仅从特定位置删除字符串中的分隔符?

时间:2015-05-19 14:06:10

标签: regex r string replace strsplit

我有以下文字:

//@A:Good!//@B: Wow!//@C: How come?@D//@E:    
//@A:Good!//@B: Wow!//@C: How come?@D//

我想只删除此字符串中的// 如果没有与之关联的@

我想要的输出是:

 //@A:Good!//@B: Wow!//@C: How come?@D//@E:    
 //@A:Good!//@B: Wow!//@C: How come?@D

3 个答案:

答案 0 :(得分:3)

您可以使用否定前瞻搜索:

//(?!@)

并替换为空字符串。

RegEx Demo

答案 1 :(得分:2)

您可以使用捕获组并使用反向引用替换。这样,您甚至不需要指定perl=T

str <- '//@A:Good!//@B: Wow!//@C: How come?@D//@E: //@A:Good!//@B: Wow!//@C: How come?@D//'
gsub('//([^@]|$)', '\\1', str)

模式说明:

  • // - 2个字面斜线
  • ([^@]|$) - 捕获与非@[^@])或字符串$的结尾匹配的第1组。

  • \\1 - 是对捕获的组内容的反向引用,将其重新放回替换后的字符串中。

demo program的输出:

[1] "//@A:Good!//@B: Wow!//@C: How come?@D//@E: //@A:Good!//@B: Wow!//@C: How come?@D"

答案 2 :(得分:0)

\\/\\/(?!@)

您可以使用gsubperl=True进行尝试。请参阅演示。

https://regex101.com/r/mT0iE7/34