1

一个非常琐碎的问题 - 尝试了几次迭代,仍然无法得到正确的答案。也许“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”正在做它应该做的事情。它正在搜索技术上在原始字符串中的字符串“次要目标”。但我的理解是我可以使用“fixed=TRUE”命令进行精确匹配。但显然我错了。

如果带有“fixed=TRUE”的“grep”不是完全匹配的正确命令,什么会起作用?“str_match”也不起作用。如果我的模式是:“次要目标”,它应该返回“integer(0)”,但如果我的模式是“次要目标”,它应该返回 1。

非常感谢任何输入。非常感谢!- 西马克


更新:在下面尝试 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) integer(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!
4

1 回答 1

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
于 2013-07-19T10:12:11.607 回答