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

时间:2019-09-11 00:39:58

标签: r regex regex-lookarounds

嗨,我想用空格代替正斜杠,但前提是它只出现一次。

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

在这里,我希望输出为:NOOOOO // ABCDEFGHI asdfasd // sdkksksks

3 个答案:

答案 0 :(得分:2)

使用sub尝试以下选项:

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

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

此处的策略是使用模式(?<!/)/(?!/),该模式与单个正斜杠匹配,该斜杠在两侧均被另一个正斜杠包围。

答案 1 :(得分:2)

您可以使用subperl=TRUE选项来使用(*SKIP)(*FAIL),并使用/{2,}(*SKIP)(*F)|/ 选项来匹配不应该包含在匹配项中的字符。

在这种情况下,您可以匹配2个或更多不应包含在匹配中的正斜杠。之后,将单个正斜杠匹配,以空格代替。

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

Regex demo | R demo

例如

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

输出

dbSendQuery(conn, 'set character set "utf8"')
data <- dbReadTable( conn, "name")

答案 2 :(得分:1)

另一种方法是使用捕获组

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

比用\1 \2代替

enter image description here

Regex Demo