2017-02-15 141 views
0

假設我有一個具有以下特點GSUB功能r中刪除斜槓

"\"------------080209060700030309080805\"" 

現在我想用GSUB功能r中刪除「\和\」部分的字符串,只有請保留以下字符:

"------------080209060700030309080805\" 

任何人都可以幫助我弄清楚該如何正確使用它?

+1

' 「------------ 080209060700030309080805 \」'作爲結果看起來像一個錯字:做ÿ你真的希望最終的反斜槓成爲你結果的一部分嗎?請編輯您的答案... –

+0

請以純文本向我們顯示輸入和輸出應該是什麼。不要擔心在R中的轉義 –

+0

這裏的輸入看起來是這樣的: 「\」------------ 080209060700030309080805 \「」,這實際上是來自垃圾郵件/來自數據科學書籍的火腿數據。我想使用gsub函數只抓住「------------ 080209060700030309080805」「部分,這意味着我想擺脫這裏的斜線,但目前看來我沒有一個很好的方法來做到這一點。 – tql66

回答

1
string <- "\\------------080209060700030309080805\\" 
string <- gsub("^\\\\(.*)\\\\$", "\\1", string) 

注:我使用的模式是^\(.*)\$,這將在開始和結束反斜槓之間匹配的一切。這隻會匹配字符串,因此它們都以反斜槓開始和結束。此外,我們使用四個反斜槓(\\\\)來表示gsub()中的模式的文字反斜槓。我們需要逃避兩次,一次是R,另一次是正則表達式引擎。

4

編輯1:固定的臭蟲(創建一個字符串反斜槓需要兩個反斜槓):

s <- '\\"------------080209060700030309080805\\"' 
s 
gsub('\\"', "", s, fixed = TRUE) 

結果

> s <- '\\"------------080209060700030309080805\\"' 
> s 
[1] "\\\"------------080209060700030309080805\\\"" 
> gsub('\\"', "", s, fixed = TRUE) 
[1] "------------080209060700030309080805" 

請注意R單反斜線是轉義碼不是字符串的一部分:

> charToRaw('\\"') 
[1] 5c 22 
> charToRaw('\"') 
[1] 22 

因此,您必須在引用的字符串中使用兩個反斜槓來在內部創建一個反斜槓。如果打印這個字符串反斜槓再次逃脫它看起來令人困惑:

> print('\\"') 
[1] "\\\"" 

如果你要打印字符串的轉義內容中使用的cat代替print

> cat('\\"') 
\" 

對於較多見的幫助R:?"'"

字符常量

單引號和雙引號分隔字符常量。它們可以互換使用 ,但首選雙引號(而字符 常用雙引號打印),因此單引號爲 通常只用於分隔包含雙引號的字符常量。

反斜槓用於在字符 常量內啓動轉義序列。轉義不在下表中的字符是 錯誤。

單引號需要用單引號 字符串中的反斜槓和雙引號字符串中的雙引號進行轉義。

\ n換行\ r回車\ t製表\ b退格\一個警報(鐘形) \ f換\ v垂直製表\反斜槓\ \ 'ASCII撇號' \ 「ASCII引號」`ASCII嚴重口音(反向)`\ nnn
給定八進制代碼(1,2或3位數)的字符\ xnn字符 給定十六進制代碼(1或2個十六進制數字)\ unnnn Unicode字符 給定代碼(1--4十六進制數字)\ Unnnnnnnn Unicode字符給出 代碼(1--8個十六進制數字)