3

我正在尝试使用str_detect. 我的模式是一系列“....” - 点的确切数量未知。我正在尝试str_detect如下使用....

但是,在这种特殊情况下,str_detect返回 TRUE。想知道我在哪里做错了,是否str_detect完全可以使用正确的功能?希望这里有人可以提供帮助?

library(stringr)
dot_pat="\\.........................";
str="The primary.objective is of the study."
str_detect(str,dot_pat)

这将返回 TRUE。我期待 FALSE 因为点str不遵循模式。

在此先感谢,西马克

4

3 回答 3

4

您的模式意味着:一个点 (\\.) 后跟 24 个符号。所以这匹配:“.objective 属于 stu”。

如果您想检测 10 个点符号,请使用如下模式:dot_pat="\.{10}"

str_detect("The primary.objective is of the study.", "\\.{10}")
str_detect("hello..........world", "\\.{10}")
于 2013-07-23T08:29:08.710 回答
1

另一种更糟糕的方法是逃避每一个“。” 肖恩表示这是“任何字符”的正则表达式,除非它被转义。

paste(rep("\\.", 10), collapse = "")
## This gives
## [1] "\\.\\.\\.\\.\\.\\.\\.\\.\\.\\."


str_detect("The primary.objective is of the study.", paste(rep("\\.", 10), collapse = ""))
str_detect("hello..........world", paste(rep("\\.", 10), collapse = ""))
于 2013-07-23T12:40:36.677 回答
0

您的模式将匹配一个停止 (.),后跟 24 个任意字符作为“。” 表示正则表达式中的任何字符通过键入来引用正则表达式的帮助

?regex

您可以通过将模式设置为类似的东西来检测从 1 到 24 的任意数量的停止

dot_pat <- "\\.{1,24}"

\\“。”放在前面。将使它专门匹配一个停止,而不仅仅是任何字符。

于 2013-07-23T08:33:46.393 回答