如何在R中使用grep对以#*开头的行进行grep

时间:2018-11-10 11:16:21

标签: r regex

我对R中的Grep有疑问:如何指定元素以#*开头(后跟空格)并带有某个字符或数字?

titre_index <- grep('#\*', test)
  

错误:“ *”是字符串中以“'#*”开头的无法识别的转义符

2 个答案:

答案 0 :(得分:2)

您的意思是\\*。第二个反斜杠转义R字符串中的反斜杠;然后组合的反斜杠会在正则表达式中转义星号。

R首先需要了解字符串:

cat('\\*')
# \*

R理解的字符串然后传递到正则表达式引擎,该引擎需要转义星号以将其与通配符*区别开。

关于您要匹配的完整模式,我不确定我是否理解:

  

以#*开头,后跟(无空格)某些字符或数字

但是我认为您需要#*,然后是字母或数字,在这种情况下,这很适合帐单:

"^#\\*[0-9a-zA-Z]"

也许更清晰易读,因为:

"^#[*][[:alnum:]]"

答案 1 :(得分:2)

为避免弄清楚需要使用多少个反斜线,请使用[*]来匹配星号。

grep("^#[*]", x, value = TRUE)

另一种根本不使用任何正则表达式的方法是:

x[ substr(x, 1, 2) == "#*" ]

x[ startsWith(x, "#*") ]