除非我遗漏了一些东西,否则这个正则表达式看起来非常简单:
grepl("Processor\.[0-9]+\..*Processor\.Time", names(web02))
但是,它不喜欢转义期间\.
,我的意图是文字化时期:
Error: '\.' is an unrecognized escape in character string starting "Processor\."
我对这种正则表达式语法有什么误解?
答案 0 :(得分:53)
我的R-Fu很弱到不存在但我想我知道是什么了。
R处理器的字符串处理部分必须查看字符串内部以将\n
和相关的转义序列转换为它们的字符等价物。 R不知道\.
的意思,所以它抱怨。您希望将转义的点放入正则表达式引擎中,因此您需要通过字符串管理器获得单个\
。做这种事情的通常方法是逃避逃脱:
grepl("Processor\\.[0-9]+\\..*Processor\\.Time", names(web02))
在另一种语言(R)中嵌入一种语言(正则表达式)通常有点混乱,当两种语言使用相同的转义语法时更是如此。
答案 1 :(得分:3)
以R为中心的方法是使用[::]
表示法,例如:
grepl("[:.:]", ".")
# [1] TRUE
grepl("[:.:]", "a")
# [1] FALSE
从文档(?regex
):
扩展正则表达式中的元字符为。 \ | ()[{{^ $ * +?,但请注意,它们是否具有特殊含义取决于上下文。
[:punct:] 标点符号: ! “#$%&'()* +,-。/:; <=>?@ [\] ^ _ _ {{}〜。
答案 2 :(得分:1)
而不是
\.
尝试
\\.
您需要先退出退格键。