【发布时间】:2019-09-11 00:39:58
【问题描述】:
您好,我想用空格替换正斜杠,但前提是它出现一次。
str_replace_all( 'NOOOOO//ABCDEFGHI/asdfasd//sdkksksks', "/(?!=/)", " ")
我希望输出为:NOOOOO//ABCDEFGHI asdfasd//sdkksksks
【问题讨论】:
标签: r regex regex-lookarounds
您好,我想用空格替换正斜杠,但前提是它出现一次。
str_replace_all( 'NOOOOO//ABCDEFGHI/asdfasd//sdkksksks', "/(?!=/)", " ")
我希望输出为:NOOOOO//ABCDEFGHI asdfasd//sdkksksks
【问题讨论】:
标签: r regex regex-lookarounds
使用sub 尝试以下选项:
input <- "NOOOOO//ABCDEFGHI/asdfasd//sdkksksks"
gsub("(?<!/)/(?!/)", " ", input, perl=TRUE)
[1] "NOOOOO//ABCDEFGHI asdfasd//sdkksksks"
这里的策略是使用模式(?<!/)/(?!/),它匹配一个正斜杠,它在两边都被另一个正斜杠以外的任何东西包围。
【讨论】:
!/ 和 [^/] 中以两种方式表示?前一个 perl 是特定的吗?
!/ 是消极后视的一部分,即(?<!text) 是积极后视(?<=text) 的否定。
[^/] 本身的意思是“不是斜线”。 !/ 仅在作为环视的一部分时才有意义,例如(?!/) 表示“后面的不是斜线。”
[^/] 表示匹配任何不是/ 的东西,等等另一方面some pattern(?!) 表示some pattern 后面不能跟/
您可以使用(*SKIP)(*FAIL) 和sub 以及perl=TRUE 选项来匹配不应成为匹配部分的字符,而不是使用环视。
在这种情况下,您可以匹配 2 个或更多不应包含在匹配项中的正斜杠。之后,匹配单个正斜杠以替换为空格。
/{2,}(*SKIP)(*F)|/
例如
s <- "NOOOOO//ABCDEFGHI/asdfasd//sdkksksks"
gsub("/{2,}(*SKIP)(*F)|/", " ", s, perl=TRUE)
输出
[1] "NOOOOO//ABCDEFGHI asdfasd//sdkksksks"
【讨论】:
【讨论】: