2015-06-08 115 views
4

我想获得字符串的\/位置。下面是我试图代码:逃命字符的位置字符的字符串,R郎

x <- "<span id=\"ref_12590587_l\">6,803.61</span>_l>" 
gregexpr("\\\", x) 
which(strsplit(x, "")[[1]]=="\") 

我的问题是,当我在Rstudio尝试这些代码,我得到一个继续提示,提示REPL变得+。这些代码适用于其他角色。

为什么我得到了继续提示,即使在\倒引号引述?

编辑:修正后的字符串后评论。

+0

您的输入字符串中没有“\”。如果你想查找'/',只需使用'gregexpr(“/”,x)',如果你想查找“\”,使用'gregexpr(“\\\\”,x)'。 –

+0

编辑字符串以纠正一个。 @stribizhev你介意解释一下4个逃脱部分吗? – Frash

+1

'gregexpr'需要一个正则表达式。在正则表达式中,“\”是一个特殊符号,因此它必须为正则表达式引擎转义。但在'gregexpr'中,我们传递了一个字符串,它本身正在使用“\”来转义像'\ n'这样的实体。所以,我们首先需要避开R的反斜杠,然后是正则表达式引擎。 –

回答

1

你得再添斜杠(如stribizhev在评论中说的)。所以,你正在寻找

gregexpr("\\\\", x)

的原因是,你需要躲避\,两次。所以\\只给你1个反斜杠。当你放入3时,第三个反斜杠实际上是在逃避报价!

见一个例子:

gregexpr("\"", 'hello, "hello"')

这是搜索字符串中的报价。

+0

感谢您的解释。有没有更多像这样的细微差别的来源? – Frash

+0

请参阅[介绍R字符向量](http://cran.r-project.org/doc/manuals/r-release/R-intro.html#Character-vectors)开始... – nsheff

1

只是形式化我的意见:

  1. x变量不包含任何反斜杠,这些字符转义,让我们把文字引号为字符串。
  2. gregexpr("\\\", x)包含非封闭字符串字面,因为右边的引号逃脱,并因此被视为文字引号,不是用来“关闭”的字符串字面的一个。
  3. 要在gregexpr中搜索文字\,我们需要4个反斜杠\\\\,因为gregexpr需要正则表达式。在正则表达式中,“\”是一个特殊符号,因此它必须为正则表达式引擎转义。但里面gregexpr,我们传递本身是使用\转义实体,如\n的字符串。所以,我们首先需要避开R的反斜杠,然后是正则表达式引擎。

这就是说,你可以使用

gregexpr("\\\\", x) 

得到的只有文字反斜杠,或

gregexpr("\\\\|/", x) 

也找正斜杠。

请参阅IDEONE demo