2013-08-23 43 views
2

我需要搜索大量字符串以查找以PID開頭的「單詞」。 PID爲ID標籤,並且他們都編號(PID1,PID23等)的字符串的查找以「PID」開頭並返回單詞(in R)的字符串

示例進行搜索: PID442走到鎮

我需要返回的特定ID,因此輸出是「PID442」。我試圖做到這一點在R.

+2

每個字符串都包含一個PID嗎?它可以包含多個?在這些可能性下你的輸出應該是什麼樣子? – flodel

回答

4

試試這個:

> library(gsubfn) 
> strapply(str, "\\bPID\\d+\\b", c, perl = TRUE, simplify = TRUE) 
[1] "PID442" "PID1" 
+0

我對我的所有數據都試過了,看起來效果很好。謝謝! – user2709239

4
str <- c("PID442 WALKS TO TOWN", "I AM PID1") 
gsub(".*\\b(PID\\d+)\\b.*", "\\1", str) 
#[1] "PID442" "PID1" 

\\b是一個單詞邊界,其在開始或單詞的末尾

\\d+對應的數字正數

.*是相匹配非負數量的任何東西

\\1PID\\d+替換str的每個元素,即正則表達式t的部分帽子是第一個括號內

+0

謝謝!我昨晚在看正則表達式,但之前沒有使用它們。 – user2709239

+0

@ user2709239,沒問題,讓我知道如果你仍然發現我的解決方案不清楚。不要忘記,您可以通過點擊左側的勾號來接受其中一個答案。 – Julius

+0

在數據上使用它後,它似乎遇到了問題,接受任何用大寫P,I或D的單詞。我無法解決這個問題。 – user2709239

5

另一種方法,它(我希望)是有點簡單:

> str <- 'PID442 WALKS TO TOWN' 
> regmatches(str, regexpr('\\<PID\\w*\\>', str)) 
[1] "PID442" 

regexpr獲得第一的str位置比賽。 (如果您正在查找字符串中的多個匹配項,就像在其他答案中一樣,只需將regexpr替換爲gregexpr即可。)regmatches返回對應於匹配項的字符串。

在正則表達式中: \\<\\>標記單詞的開始和結束。 \\w匹配「單詞」字符,因此\\w*匹配零個或多個單詞字符。

相關問題