确切的字符串匹配

时间:2013-07-19 10:00:15

标签: regex r

一个非常微不足道的问题 - 尝试了几次迭代,仍然无法得到正确的答案。也许“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!

1 个答案:

答案 0 :(得分:1)

我能想到的一种方法是使用negative lookaheadperl=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