Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式中的逸出管道(“逸出管道”)_Regex_R - Fatal编程技术网

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"  "|"    "."