【问题标题】:Escaped Periods In R Regular ExpressionsR 正则表达式中的转义句点
【发布时间】:2011-10-02 01:22:55
【问题描述】:

除非我遗漏了什么,否则这个正则表达式看起来很简单:

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

但是,它不喜欢转义句点,\.,我的意图是成为文字句点:

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

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

【问题讨论】:

  • 我不知道 R 但你试过\\.?
  • @mu:是的,解决了它。但想知道为什么我需要双 `` 来逃避它
  • 您需要一个转义另一个,这样您才能通过字符串处理程序并进入正则表达式引擎。

标签: regex r


【解决方案1】:

我的R-Fu虚弱到不存在的地步,但我想我知道发生了什么。

R 处理器的字符串处理部分必须窥探字符串内部,以将\n 和相关的转义序列转换为它们的等效字符。 R 不知道\. 是什么意思,所以它会抱怨。您想将转义点放入正则表达式引擎,因此您需要通过字符串处理程序获得一个 \。做这种事情的通常方法是逃避逃跑:

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

在另一种语言 (R) 中嵌入一种语言(正则表达式)通常有点混乱,当两种语言使用相同的转义语法时更是如此。

【讨论】:

    【解决方案2】:

    代替

    \.
    

    试试

    \\.
    

    您需要先退出退格键。

    【讨论】:

      【解决方案3】:

      以 R 为中心的方式是使用 [::] 表示法,例如:

      grepl("[:.:]", ".")
      # [1] TRUE
      grepl("[:.:]", "a")
      # [1] FALSE
      

      来自文档 (?regex):

      扩展正则表达式中的元字符是 . \ | ( ) [ { ^ $ * + ?,但请注意,这些是否有特殊含义取决于上下文。

      [:punct:] 标点符号: ! " # $ % & ' ( ) * + , - . / : ; ?@ [ \ ] ^ _ ` { | } ~.

      【讨论】:

      • 谢谢! pattern = "blabla\\." 对我不起作用,但 "blabla[:.:]" 对我有用。
      猜你喜欢
      • 2022-06-10
      • 1970-01-01
      • 2013-01-18
      • 2016-03-31
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多