使用str_detect检测String中的模式

时间:2013-07-23 08:19:52

标签: r stringr

我正在尝试使用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中的点不符合模式。

提前致谢,simak

3 个答案:

答案 0 :(得分:4)

您的模式表示:一个点(\\。)后跟24个符号。所以这匹配:“。目标是stu”。

如果要检测10个点符号,请使用如下模式: dot_pat = “\。{10}”

str_detect("The primary.objective is of the study.", "\\.{10}")
str_detect("hello..........world", "\\.{10}")

答案 1 :(得分:1)

另一个更糟糕的方法是逃避每一个“。” Sean指出的是“任何角色”的正则表达式,除非它被转义。

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 = ""))

答案 2 :(得分:0)

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

来引用正则表达式的帮助
?regex

您可以通过将模式设置为

来检测1到24之间的任意数量的停靠点
dot_pat <- "\\.{1,24}"

\\放在“。”前面。将使它与特定的停止匹配,而不仅仅是任何角色。