【问题标题】:Partial string matching using patterns使用模式进行部分字符串匹配
【发布时间】:2014-05-28 01:30:55
【问题描述】:

我需要在 R 中编写一个查询来匹配列名中的部分字符串。我正在寻找类似于 SQL 中的 LIKE 运算符的东西。例如,如果我知道字符串的开头、中间或结尾部分,我会以以下格式编写查询:

LIKE 'beginning%middle%' 

在 SQL 中,它会返回匹配的字符串。在pmatchgrep 中,我似乎只能指定 'beginning' 、 'end' 而不是顺序。我正在寻找 R 中的任何类似功能吗?

例如,假设我正在查看向量:

y <- c("I am looking for a dog",
       "looking for a new dog", "a dog", "I am just looking")

假设我想编写一个选择"looking for a new dog" 的查询,并且我知道字符串的开头是"looking",字符串的结尾是"dog"。如果我执行grep("dog",y),它将返回1,2,3。有什么方法可以在grep 中指定开始和结束吗?

【问题讨论】:

  • 你能展示一些 grep 失败的测试用例吗?
  • 例如,假设我想查看向量 y
  • 我会编辑您的原始问题以包含该示例。这是重要的信息。
  • grep("dog", y) 应该从该向量返回 1 2 3

标签: r regex


【解决方案1】:

grep 函数支持正则表达式,使用正则表达式,您几乎可以匹配任何内容

y<- c("I am looking for a dog", "looking for a new dog", "a dog", "I am just looking")
grep("looking.*dog",y, value=T)
# [1] "I am looking for a dog" "looking for a new dog" 

在这里,此模式查找looking,然后是“可能是什么”,然后是dog。所以这应该做你想要的。

【讨论】:

    【解决方案2】:

    在正则表达式中,^ 指定字符串的开头,$ 指定结尾,因此:

    y<- c("I am looking for a dog", "looking for a new dog", "a dog", "I am just looking")
    grep("^looking.*dog$", y)
    [1] 2
    

    【讨论】:

      猜你喜欢
      • 2020-10-16
      • 2018-10-13
      • 2013-09-08
      • 1970-01-01
      • 2018-03-26
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      相关资源
      最近更新 更多