我需要搜索大量字符串以查找以PID開頭的「單詞」。 PID爲ID標籤,並且他們都編號(PID1,PID23等)的字符串的查找以「PID」開頭並返回單詞(in R)的字符串
示例進行搜索: PID442走到鎮
我需要返回的特定ID,因此輸出是「PID442」。我試圖做到這一點在R.
我需要搜索大量字符串以查找以PID開頭的「單詞」。 PID爲ID標籤,並且他們都編號(PID1,PID23等)的字符串的查找以「PID」開頭並返回單詞(in R)的字符串
示例進行搜索: PID442走到鎮
我需要返回的特定ID,因此輸出是「PID442」。我試圖做到這一點在R.
試試這個:
> library(gsubfn)
> strapply(str, "\\bPID\\d+\\b", c, perl = TRUE, simplify = TRUE)
[1] "PID442" "PID1"
我對我的所有數據都試過了,看起來效果很好。謝謝! – user2709239
str <- c("PID442 WALKS TO TOWN", "I AM PID1")
gsub(".*\\b(PID\\d+)\\b.*", "\\1", str)
#[1] "PID442" "PID1"
\\b
是一個單詞邊界,其在開始或單詞的末尾
\\d+
對應的數字正數
.*
是相匹配非負數量的任何東西
\\1
用PID\\d+
替換str
的每個元素,即正則表達式t的部分帽子是第一個括號內
謝謝!我昨晚在看正則表達式,但之前沒有使用它們。 – user2709239
@ user2709239,沒問題,讓我知道如果你仍然發現我的解決方案不清楚。不要忘記,您可以通過點擊左側的勾號來接受其中一個答案。 – Julius
在數據上使用它後,它似乎遇到了問題,接受任何用大寫P,I或D的單詞。我無法解決這個問題。 – user2709239
另一種方法,它(我希望)是有點簡單:
> str <- 'PID442 WALKS TO TOWN'
> regmatches(str, regexpr('\\<PID\\w*\\>', str))
[1] "PID442"
regexpr
獲得第一的str
位置比賽。 (如果您正在查找字符串中的多個匹配項,就像在其他答案中一樣,只需將regexpr
替換爲gregexpr
即可。)regmatches
返回對應於匹配項的字符串。
在正則表達式中: \\<
和\\>
標記單詞的開始和結束。 \\w
匹配「單詞」字符,因此\\w*
匹配零個或多個單詞字符。
每個字符串都包含一個PID嗎?它可以包含多個?在這些可能性下你的輸出應該是什麼樣子? – flodel