2015-10-02 26 views
0

我正在處理數據的結構是爲了多個目的而使用單個字段。我有超過1萬條記錄要處理,並且我需要將具有意義的特定系列字符提取到我的dataFrame中的不同字段中。我需要從中提取出可預測的模式;下面是一個例子:從非結構化文本中提取字符串值

x = "This field has lots of text and also what I need to extract from it which is 555_AB345678" 

我需要提取的是555_AB345678值。前三個值(555)和下劃線都是可預測的; AB345678不是。但是,至少字符串的最後4個值始終是數字。我不能保證我想要的值是在字符串的末尾,但在大多數情況下,他們是我會很滿意從那裏開始的。

我已經探索使用gregxpr()substring(),但還沒有得到它的工作。我在想strsplit()可以工作,但是我沒有一個可預測的分隔符來分割(我需要的值只是一個可預測的模式)。我也發現了類似的問題,但沒有一個看起來符合我的標準。

extract a substring in R according to a pattern

我想看看是否有人在這裏有關於如何可以這樣做的建議。

+1

這個例子感謝弗蘭克偉大的工作!我會用我的其餘數據給我一個鏡頭。如果你真的那麼友善,你能否在這個答案中解釋你在用這個函數做什麼?我肯定會接受它! – Sevyns

+0

@Frank你應該發佈答案 –

回答

1

的基礎R的方法是用該卷積提取:

regmatches(x, regexpr("555_.*$", x)) 
# "555_AB345678" 

$是對字符串的末尾;和.*,任何字符序列(包括一個空字符)。


或者,我們可以只需要部分更換整個字符串:

sub("^.*(555_.*)$", "\\1", x) 
# "555_AB345678" 

^是字符串的開始,所以我們現在整個字符串匹配,從^$\\1替換是指括號內的部分。有關詳細信息,請參閱?regex。對於語法較好的提取器,您可以嘗試使用stringr軟件包:

library(stringr) 
str_extract(x, "555_.*$") 
# "555_AB345678"