一个非常微不足道的问题 - 尝试了几次迭代,仍然无法得到正确的答案。也许“grep”不是正确的命令,或者我的理解完全没有。
我有一个字符串:
"Part 2.2 are Secondary objectives of this study".
我正在尝试完全匹配:“次要目标”。我想我可以在这里使用“fixed = TRUE”,但它匹配两者。
> str5 = "Part 2.2 are Secondary objectives of this study"
> line<-grep("Secondary objectives",str5,fixed=TRUE)
> line
[1] 1
> str5 = "Part 2.2 are Secondary objectives of this study"
> line<-grep("Secondary objective",str5,fixed=TRUE)
> line
[1] 1
我理解“grep”正在按照它应该做的。它正在搜索字符串“Secondary objective”,它在技术上是在原始字符串中。但我的理解是我可以使用“fixed = TRUE”命令进行精确匹配。但显然我错了。
如果使用“fixed = TRUE”的“grep”不是完全匹配的正确命令,那么什么会起作用? “str_match”也没有用。 如果我的模式是:“次要目标”,它应该返回“整数(0)” 但如果我的模式是“次要目标”,它应该返回1.
非常感谢任何输入。非常感谢! - simak
更新:尝试下面的Arun建议 - 按原样正常工作。
str5 = "Part 2.2 are Secondary objectives of this study"
> grep("(Secondary objectives)(?![[:alpha:]])",str5, perl=TRUE)
[1] 1
> grep("(Secondary objective)(?![[:alpha:]])",str5, perl=TRUE)
integer(0)
str5 =“第2.2部分是本研究的次要目标” grep(“(pat)(?![[:alpha:]])”,str5,perl = TRUE) 整数(0)
However when I did this:
> str5 = "Part 2.2 are Secondary objectives of this study"
> pat <- "Secondary objectives"
> grep("(pat)(?![[:alpha:]])",str5, perl=TRUE)
integer(0)
Thought I can call "pat" inside "grep". Is that incorrect? Thanks!
答案 0 :(得分:1)
我能想到的一种方法是使用negative lookahead
(perl=TRUE
选项)。也就是说,我们检查您的模式后是否没有其他字母表,如果是,则返回1
否则不匹配。
grep("(Secondary objective)(?![[:alpha:]])", x, perl=TRUE)
# integer(0)
grep("(Secondary objectives)(?![[:alpha:]])", x, perl=TRUE)
# [1] 1
即使你正在搜索的模式结束也是如此,因为我们搜索的不是字母表。也就是说,
grep("(this stud)(?![[:alpha:]])", x, perl=TRUE)
# integer(0)
grep("(this study)(?![[:alpha:]])", x, perl=TRUE)
# [1] 1