R - 如何替换周围字符的空间条件?

Con*_* M. 1 regex r gsub

我重新格式化了一些字符向量,但格式化中有一些异常,我出乎意料地需要处理.这是一个将重新格式化的字符串示例:

t <- "COZ009 - 013 - 016 - 018 034>036 - 039>040 - 066>081"
Run Code Online (Sandbox Code Playgroud)

问题是这里缺少一个连字符"... 018 034> 036 ......".它应该是"...... 018 - 034> 036 ......".

我想使用一个简单的基函数来添加一个连字符gsub,但是如何在不触及所有其他空格的情况下替换缺少连字符的空格?那就是如何根据周围的角色进行替换?

我能够想出的最接近的是.

t2 <- gsub(" - ", "-", t)
gsub(" ", "-", t2)
[1] "COZ009-013-016-018-034>036-039>040-066>081"
Run Code Online (Sandbox Code Playgroud)

可能这个解决方案没有任何问题,但知道如何有条件地更换会很好.

G5W*_*G5W 5

您可以指定周围的字符是数字并使用捕获组,以便您不要删除它们.

gsub("(\\d)\\s+(\\d)", "\\1 - \\2", t)
[1] "COZ009 - 013 - 016 - 018 - 034>036 - 039>040 - 066>081"
Run Code Online (Sandbox Code Playgroud)

这里围绕数字的括号将它们存储在变量\ 1和\ 2中,因此您可以避免更改它们.

  • 你需要一个正斜杠来逃避特殊角色,然后需要另一个正斜杠来逃避第一个正斜杠.单独的's`意味着字母"s",添加正斜杠让R将其识别为空格,因为这是一个特殊字符,你需要另一个正斜杠来"逃避"它.它与你的用例中编写`[[:space:]]`没有什么不同. (5认同)