替换字符串中的非重复字符

Replace non-duplicate character in string

嗨,我想用 space 替换正斜杠,但前提是它出现一次。

 str_replace_all( 'NOOOOO//ABCDEFGHI/asdfasd//sdkksksks', "/(?!=/)", " ")

此处我希望输出为:NOOOOO//ABCDEFGHI asdfasd//sdkksksks

使用 sub 尝试以下选项:

input <- "NOOOOO//ABCDEFGHI/asdfasd//sdkksksks"
gsub("(?<!/)/(?!/)", " ", input, perl=TRUE)

[1] "NOOOOO//ABCDEFGHI asdfasd//sdkksksks"

这里的策略是使用模式 (?<!/)/(?!/),它匹配一个正斜杠,它在两边都被除了另一个正斜杠之外的任何东西包围。

另一种方法是使用捕获组

 (^|[^\/\n])\/([^\/\n]|$)

比替换为

Regex Demo

您可以使用 (*SKIP)(*FAIL)sub 选项 perl=TRUE 来匹配不应包含在匹配项中的字符,而不是使用环视。

在这种情况下,您可以匹配 2 个或更多不应包含在匹配项中的正斜杠。之后,匹配一个正斜杠替换为 space.

/{2,}(*SKIP)(*F)|/

Regex demo | R demo

例如

s <- "NOOOOO//ABCDEFGHI/asdfasd//sdkksksks"
gsub("/{2,}(*SKIP)(*F)|/", " ", s, perl=TRUE)

输出

[1] "NOOOOO//ABCDEFGHI asdfasd//sdkksksks"