在以“PID”开头的字符串中查找单词并返回单词(在R中)

时间:2013-08-23 00:08:18

标签: regex r

我需要搜索大量字符串才能找到以PID开头的“单词”。 PID是一个ID标签,它们都被编号(PID1,PID23等)

要搜索的字符串示例: PID442步行到城镇

我需要返回特定ID,因此输出为“PID442”。我试图在R中做到这一点。

3 个答案:

答案 0 :(得分:5)

另一种方法,(我希望)稍微简单一些:

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

regexpr获得第一场比赛的str中的位置。 (如果您在字符串中查找多个匹配项,就像在其他一些答案中一样,只需将regexpr替换为gregexpr。)regmatches将返回与匹配项对应的字符串。

在正则表达式中: \\<\\>标记了单​​词的开头和结尾。 \\w匹配“字”字符,因此\\w*匹配零个或多个字符。

答案 1 :(得分:4)

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

\\b是一个在单词的开头或结尾匹配的单词边界

\\d+对应正数位数

.*是非负数量

\\1str的每个元素替换为PID\\d+,即第一个括号内的正则表达式部分

答案 2 :(得分:4)

试试这个:

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