str_detect中的正则表达式?

str_detect中的正则表达式?,r,regex,pattern-matching,R,Regex,Pattern Matching,我有像c1c5、c5c1、c4c3… 我想检索所有以c4和c5开头或结尾的colname 我已尝试使用以下方法: str_detect(colnames(df), "c5c\\d+") str_detect(colnames(df), "c4c\\d+") str_detect(colnames(df), "c\\d+c4") str_detect(colnames(df), "c\\d+c5") 有没有办法把它组合成一个表达式?请告知。尝试使用sapply: colnames(df)[

我有像
c1c5、c5c1、c4c3…

我想检索所有以
c4
c5
开头或结尾的colname

我已尝试使用以下方法:

str_detect(colnames(df), "c5c\\d+")

str_detect(colnames(df), "c4c\\d+")

str_detect(colnames(df), "c\\d+c4")

str_detect(colnames(df), "c\\d+c5")

有没有办法把它组合成一个表达式?请告知。

尝试使用
sapply

colnames(df)[sapply(X = colnames(df), FUN = function (X) substr(X, 1, 2) %in% c("c4", "c5") | substr(X, 3, 4) %in% c("c4", "c5"))]
这样,您就可以让colname以“c4”或“c5”开头或结尾

如果您有长度大于4的colname,或者您想使用与“c4”或“c5”不同的内容,您可以使用以下内容对其进行概括:

patterns <- c("c4", "c5") #you can change it

colnames(df)[sapply(X = colnames(df), FUN = function (X) substr(X, 1, 2) %in% patterns  | substr(X, nchar(X) - 1, nchar(X)) %in% patterns )]
模式您可以使用

str_detect(colnames(df), "^c[54]|c[54]$")
或者,以R为基数:

grep("^c[45]|c[45]$", colnames(df))
正则表达式是
^c[45]|c[45]$

  • ^
    -字符串的开头
  • c
    -a
    c
  • [45]
    -
    4
    5
  • |
    -或
  • c[45]
    -
    c4
    c5
  • $
    -。。。在字符串的末尾

    • 你也可以用这种方法。即使字符串中有多个单词,它也可以工作

      str_detect(colnames(df), "(\bc[45])|(c[45]\b)")
      

      stru detect(colnames(df),“^c[54]| c[54]$”
      /
      grep(^c[45]| c[45]$”,colnames(df))
      ?@WiktorStribiżew非常感谢这正是我要找的!请分享一个答案,这样我就可以接受了。@Davidernburg非常感谢另一个选择,我认为regex更简单、更快。如果你认为我错了,请纠正我。@steves
      grep
      也使用正则表达式。这只是一个从基函数开始的函数R@DavidArenburg我知道我指的是Wiktor提供的解决方案。