R函数history()不接受我的模式正则表达式

时间:2018-07-06 19:47:55

标签: r regex regex-lookarounds

我尝试了一种模式,以拒绝任何以0到N开头的空格,后跟“#”的行。在this test webpage,以下模式可以正常工作:

^(?!(\s*[#])).*

我将以下内容用作文本的测试行:

 #tbadword
    #test
one two
  abadwo#rds
#three

并且仅选择“非注释”行。
但是在R中,如果我尝试使用

,请使用Windows Rgui
> history(Inf, pattern = '^(?!(\\s*[#])).*' ) 

我收到错误消息“ Invalid regexp”。

有人可以指出R对这里不满意吗?我需要设置全局“ perl = TRUE”还是类似的东西?还是有一个更简单的方法来做到这一点?

2 个答案:

答案 0 :(得分:2)

history()命令具有一个...,用于将要传递给grep()的值,因此您可以使用invert=标志而不是先行查找内容你需要。怎么样

history(Inf, pattern="^\\s*#", invert=TRUE)

答案 1 :(得分:1)

您可能有R history用PCRE regex引擎解析您的正则表达式:

history(Inf, pattern="^(?!\\s*#)", perl=TRUE)

现在,^(?!\s*#)将被正确解析为

  • ^-字符串的开头
  • (?!\s*#)-如果在当前位置的右边(即字符串的开头)立即有0+个空格,然后是#,则负匹配将使匹配失败。

尽管在当前情况下solution with invert=TRUE and an opposite regex更自然,但在其他情况下您可能需要更高级的正则表达式功能,而perl=TRUE将帮助解决这些问题。