我尝试了一种模式,以拒绝任何以0到N开头的空格,后跟“#”的行。在this test webpage,以下模式可以正常工作:
^(?!(\s*[#])).*
我将以下内容用作文本的测试行:
#tbadword
#test
one two
abadwo#rds
#three
并且仅选择“非注释”行。
但是在R
中,如果我尝试使用
Rgui
> history(Inf, pattern = '^(?!(\\s*[#])).*' )
我收到错误消息“ Invalid regexp”。
有人可以指出R
对这里不满意吗?我需要设置全局“ perl = TRUE”还是类似的东西?还是有一个更简单的方法来做到这一点?
答案 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
将帮助解决这些问题。