R正则表达式中的转义周期

时间:2011-07-09 23:09:21

标签: regex r

除非我遗漏了一些东西,否则这个正则表达式看起来非常简单:

grepl("Processor\.[0-9]+\..*Processor\.Time", names(web02))

但是,它不喜欢转义期间\.,我的意图是文字化时期:

Error: '\.' is an unrecognized escape in character string starting "Processor\."

我对这种正则表达式语法有什么误解?

3 个答案:

答案 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)

而不是

\.

尝试

\\.

您需要先退出退格键。