【问题标题】:How to use grep()/gsub() to find exact match如何使用 grep()/gsub() 查找完全匹配
【发布时间】:2015-01-04 23:28:30
【问题描述】:
string = c("apple", "apples", "applez")
grep("apple", string)

这将为我提供string 中所有三个元素的索引。但我想要精确匹配“apple”这个词(即我只想让grep() 返回索引 1)。

【问题讨论】:

  • 对于完全匹配,请考虑使用==match
  • 用 gsub 代替 grep 怎么样?
  • 如果您不需要grep 参数,例如ignore.case = truevalue = true,则将any== 结合使用是更好的选择

标签: r regex word-boundary


【解决方案1】:

使用单词边界\b匹配单词和非单词字符之间的a,

string = c("apple", "apples", "applez")
grep("\\bapple\\b", string)
[1] 1

使用锚点。 ^ 断言我们处于起步阶段。 $ 断言我们已经结束了。

grep("^apple$", string)
[1] 1

您可以将正则表达式存储在一个变量中,然后像下面这样使用它。

pat <- "\\bapple\\b"
grep(pat, string)
[1] 1
pat <- "^apple$"
grep(pat, string)
[1] 1

更新:

paste("^",pat,"$", sep="")
[1] "^apple$"
string
[1] "apple"   "apple:s" "applez" 
pat
[1] "apple"
grep(paste("^",pat,"$", sep=""), string)
[1] 1

【讨论】:

  • paste0("^",pat,"$") 节省了在paste 上输入的几个字符。不需要sep=""
【解决方案2】:

对于精确匹配,使用== 最有意义。此外,这将比grep() 更快,并且显然更容易。

which(string == "apple")
# [1] 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 2015-07-02
    • 2017-12-31
    相关资源
    最近更新 更多