【问题标题】:grep function in r with two matchesr中的grep函数有两个匹配项
【发布时间】:2015-09-03 20:43:12
【问题描述】:

寻找如何使用 grep 函数进行多个匹配。 这是我的数据:

trial<-c("k_d","k_ed","k_eda","b_ed","b_eda")

我想选择同时包含“k”和“ed”的案例。使用带有“&”的 grep 不起作用,使用“|”而不是“&”当然会给出这个结果:

grep("k|ed",trial)

[1] 1 2 3 4 5

有没有办法达到这样的结果?:

[1] 2 3

【问题讨论】:

  • 你还有其他模式吗? grep('k[^a-z]ed', trial) 适用于此示例,或 which(grepl('k', trial) &amp; grepl('ed', trial))
  • 或者grep('(?=k).*ed.*', trial, perl = TRUE)
  • grep(".*k.*ed.*|.*ed.*k.*", trial)?
  • 您的解决方案和@akrun 第二个解决方案完美运行。谢谢
  • 这个有点神秘,但它也有效:which(grepl("ed",trial)*grepl("k",trial)!=0)

标签: r regex subset


【解决方案1】:

如果某些文本同时包含 1 个字符串并且另一个字符串可以写为,则匹配正则表达式

grep("k.*ed",trial)

这意味着一个特定的词序。要使用正则表达式检查子字符串是否存在,无论单词顺序如何,您都可以使用锚定前瞻:

grep("^(?=[^k]*k)(?=.*ed)",trial, perl=T)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多