检查特定字符串是否出现在R中的另一个字符串中

时间:2016-04-07 03:51:53

标签: regex r

我想知道列中是否出现特定单词。它可以是任何大写,也可以是开头或结尾或中间。我该怎么做呢?我试着查看正则表达式和grep(),但我遇到了困难。

例如下面我有一个值列和我想要的指示响应。我想检查“狗”这个词。我想要一个“1”如果“狗”被发现有任何尾随的茎,如“狗狗”或“狗狗”,但如果“狗”先于其他东西,我不想要“1”。

        mydf = structure(list(values = structure(c(7L, 4L, 1L, 2L, 3L, 9L,    8L, 
       5L, 6L), .Label = c("1 dog", "2 dog 3", "cats and dogs", "dog",  
      "DOG", "DOGG", "doggy", "no notthisdog", "not a valid value"), class =    "factor"), 
      result = c(1, 1, 1, 1, 1, 0, 0, 1, 1)), .Names = c("values", 
      "result"), row.names = c(NA, -9L), class = "data.frame")

2 个答案:

答案 0 :(得分:3)

正则表达式\b匹配单词边界(单词的开头或结尾,非捕获),因此\bdog(不区分大小写,已转义)匹配“狗”#39;在一个单词的开头。如果您需要更多用例,则需要指定它们。

mfdf$regex <- as.numeric(grepl("\\bdog", mydf$values, ignore.case=TRUE))
mydf
##              values result regex
## 1             doggy      1     1
## 2               dog      1     1
## 3             1 dog      1     1
## 4           2 dog 3      1     1
## 5     cats and dogs      1     1
## 6 not a valid value      0     0
## 7     no notthisdog      0     0
## 8               DOG      1     1
## 9              DOGG      1     1

答案 1 :(得分:0)

as.integer(grepl('\\bdog',mydf$values,ignore.case=T));
## [1] 1 1 1 1 1 0 0 1 1

或者如果你想要价值本身:

grep(value=T,'\\bdog',mydf$values,ignore.case=T);
## [1] "doggy"         "dog"           "1 dog"         "2 dog 3"       "cats and dogs" "DOG"           "DOGG"