2015-06-08 54 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