Regex 正则表达式中的逸出管道(“逸出管道”)
我需要对单词和结束符号(某些类型的标点符号)进行拆分。奇怪的是,管道(“|”)可以算作终点标记。在我尝试添加管道之前,我有代码在末端标记上显示文字。添加管道将使Regex 正则表达式中的逸出管道(“逸出管道”),regex,r,Regex,R,我需要对单词和结束符号(某些类型的标点符号)进行拆分。奇怪的是,管道(“|”)可以算作终点标记。在我尝试添加管道之前,我有代码在末端标记上显示文字。添加管道将使strsplit每个字符都成为字符串。逃避它会导致错误。如何在正则表达式中包含管道 x <- "I like the dog|." strsplit(x, "[[:space:]]|(?=[.!?*-])", perl=TRUE) #[[1]] #[1] "I" "like" "the" "dog|" "." st
strsplit
每个字符都成为字符串。逃避它会导致错误。如何在正则表达式中包含管道
x <- "I like the dog|."
strsplit(x, "[[:space:]]|(?=[.!?*-])", perl=TRUE)
#[[1]]
#[1] "I" "like" "the" "dog|" "."
strsplit(x, "[[:space:]]|(?=[.!?*-\|])", perl=TRUE)
#Error: '\|' is an unrecognized escape in character string starting "[[:space:]]|(?=[.!?*-\|"
问题实际上是你的连字符,它应该出现在: 等等都应该给你你想要的输出 如果愿意,您也可以将连字符转义,但请记住使用两个反斜杠
strsplit(x, "[[:space:]]|(?=[.!?*\\-|])", perl=TRUE)
解决此问题的一种方法是使用
\Q..\E
符号删除..
中任何字符的特殊含义。正如?regex
中所述:
如果你想从一系列的
字符,您可以将它们放在“\Q”和“\E”之间。这
与Perl不同的是,“$”和“@”在
PCRE中的“\Q..\E”序列,而Perl中的“$”和“@”是因为
变量插值
例如:
> strsplit(x, "[[:space:]]|(?=[\\Q.!?*-|\\E])", perl=TRUE)
[[1]]
[1] "I" "like" "the" "dog" "|" "."
有趣。我肯定需要多读一些正则表达式+1@Joshua,mrdwab给出了一个很好的答案,这甚至更加彻底。我从没听说过
\\Q\\E
东西。非常有用的信息。@Tylerinker:我也从来没有听说过,直到我看到你的问题后阅读了文档@Joshua,你要发表这样的声明,而不是提供链接:P@TylerRinker:正如我在回答中所说,它位于?regex
,请参阅类似Perl的正则表达式部分。两个非常好的答案,josh给出了更多的细节。谢谢你的回答+1我总是犹豫要不要在R正则表达式问题上加上正则表达式标签,因为你可以从其他语言获得正则表达式,尽管答案相似,但它们并不重叠。
strsplit(x, "[[:space:]]|(?=[.!?*\\-|])", perl=TRUE)
> strsplit(x, "[[:space:]]|(?=[\\Q.!?*-|\\E])", perl=TRUE)
[[1]]
[1] "I" "like" "the" "dog" "|" "."