2011-07-22 63 views
6

我需要使用正則表達式重新塑造我的數據幀,尤其是,這種線R-正則表達式的問題

X21_GS04.A.mzdata 

必須成爲:

GS04.A 

我tryed

pluto <- sub('^X[0-90_]+','', my.data.frame$File.Name, perl=TRUE) 

它的工作原理;比我試了

pluto <- sub('.mzdata$','', my.data.frame$File.Name, perl=TRUE) 

它也可以。

的問題是,我不知道如何將兩個代碼在一個組合,我tryed一個腳本這等

pluto <- sub('^X[0-90_]+ | .mzdata$','', my.data.frame$File.Name, perl=TRUE) 

但沒有appens。 有人可以告訴我我錯了嗎?

最佳 裏卡多

回答

2

在您正則表達式中除去空間。也逃脫.字符:\.,即:

^X[0-9]+_|\.mzdata$ 
+0

R中沒有你需要兩個轉義字符前點,即'\\ mzdata $'? – Henrik

+0

@亨利克,爲什麼? '\。'它轉義了正則表達式的char''。我不知道,需要char'\\'在我的電腦上的R. –

+0

中轉義,在R中都不起作用。您的版本會引發錯誤(錯誤:'\。'是字符串中出現無法識別的轉義符號「^ X [0-9] + _ | \。「)和'\\。'它不會刪除.mzdata部分。通常你總是需要在R中有兩個'\\'作爲轉義字符來逃避'\'本身。 – Henrik

9

正則表達式你後是這樣的:

^X\d+_(.*)\.mzdata$ 

這將匹配你的整個表達和捕獲希望保留部分在一組。您現在可以用\1(對捕獲組的引用)替換它。

在R,這將是:

result <- sub('^X\\d+_(.*)\\.mzdata$', '\\1', my.data.frame$File.Name, perl=TRUE) 
+0

謝謝!我不清楚你做了什麼,但我感謝你! – Riccardo

+0

Konrad的答案的關鍵是回溯。看到這最近的討論http://stackoverflow.com/questions/6757465/r-regex-store-variables/6757892#6757892 –