我正在尝试使用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
答案 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}"
将\\
放在“。”前面。将使它与特定的停止匹配,而不仅仅是任何角色。