2016-08-24 50 views
0

我有一個數據幀,看起來有點像子集特定文本時的位置是隨機的

uniqueID <- sample(1:10, 3, replace=F) 
faultDetails <- c("fault is blah blah blah and serial is F1AB3CDE123", "Serial No: f1ds6hrc813, fault is blah blah blah", "fault: blah blah blah serial number: F2GE8FDW159") 
myData <- cbind.data.frame(uniqueID, faultDetails) 

我需要提取的每個條目和存儲的序列號新變量,但是該字段內的位置不固定。唯一的常數是序列號的格式爲F,數字,字母,字母,數字,字母,字母,字母,數字,數字,數字。此外,文本的情況從入口變爲入口(哦自由文本的樂趣!)。

我想做這個作爲我的dplyr管道的一部分。任何幫助表示讚賞。

回答

2

這個案例與正確的正則表達式沒有多大關係。我想接近它是這樣的:

library(dplyr) 
library(stringr) 

uniqueID <- sample(1:10, 3, replace=F) 
faultDetails <- c("fault is blah blah blah and serial is F1AB3CDE123", "Serial No: f1ds6hrc813, fault is blah blah blah", "fault: blah blah blah serial number: F2GE8FDW159") 
myData <- cbind.data.frame(uniqueID, faultDetails) %>% 
    mutate(serial_number = str_extract(faultDetails, 
            "(F|f)\\d{1}\\w{2}\\d{1}\\w{3}\\d{3}")) 

myData 

    uniqueID          faultDetails serial_number 
1  7 fault is blah blah blah and serial is F1AB3CDE123 F1AB3CDE123 
2  9 Serial No: f1ds6hrc813, fault is blah blah blah f1ds6hrc813 
3  3 fault: blah blah blah serial number: F2GE8FDW159 F2GE8FDW159 

\w元字符查找「單詞字符」;這裏它用來查找字母(儘管它也會檢測下劃線)。符號\w{2}表示我想要一個兩個這樣的字符序列。 \d元字符查找數字,大括號中的數字是要查找的序列長度。

(F|f)開始正則表達式意味着它可以從Ff開始。

+0

工作出色,非常感謝,真的很清楚的解釋,所以我真的明白髮生了什麼事情:-) – pjbudden