正则表达式不在字母数字之间

时间:2016-04-04 04:22:34

标签: regex r parsing variables

我想识别字符串" mystring"在文本中(实际上是R代码),但确保它是变量名称:

  • 它不应该是更长变量的一部分,例如" thisismystring"或者" mystringisnice"。我想这可以通过在" mystring"?
  • 之前和之后排除(?!([[:alnum:]]){1})来完成。
  • 但它可以在一行的开头(例如" \ nmystring")所以我们必须小心这种类型的异常

最好的方法是什么?

编辑:单元测试

pattern = "\\bmystring\\b"
identical(grepl(pattern = pattern, 
            x = c("thisismystring","mystringisnice","\nmystring", "mystring", "mystring=", "mystring(", " mystring","mystring\n", "6mystring", "mystring0", "= mystring(", "=mystring", 
"hop
mystring")),
      c(FALSE,          FALSE,           TRUE,         TRUE,        TRUE,        TRUE,         TRUE,       TRUE,        FALSE, FALSE,       TRUE,          TRUE,    TRUE))

1 个答案:

答案 0 :(得分:3)

只需使用\b(字边界)令牌:

\\bmystring\\b

单元测试

pattern = "\\bmystring\\b"
`==`(grepl(pattern = pattern, 
                x = c("thisismystring","mystringisnice","\nmystring", "mystring", "mystring=", "mystring(", " mystring","mystring\n", "6mystring", "mystring0", "= mystring(", "=mystring", 
                      "hop
                      mystring")),
          c(FALSE,          FALSE,           TRUE,         TRUE,        TRUE,        TRUE,         TRUE,       TRUE,        FALSE, FALSE,       TRUE,          TRUE,    TRUE))
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE