2

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

要搜索的字符串示例:PID442 WALKS TO TOWN

我需要返回特定的 ID,所以输出是“PID442”。我试图在 R 中做到这一点。

4

3 回答 3

5

还有另一种方法,(我希望)更简单一点:

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

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

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

于 2013-08-23T00:36:20.020 回答
4
str <- c("PID442 WALKS TO TOWN", "I AM PID1")
gsub(".*\\b(PID\\d+)\\b.*", "\\1", str)
#[1] "PID442" "PID1" 

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

\\d+对应于正数位数

.*是任何东西的非负数

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

于 2013-08-23T00:20:45.433 回答
4

试试这个:

> library(gsubfn)
> strapply(str, "\\bPID\\d+\\b", c, perl = TRUE, simplify = TRUE)
[1] "PID442" "PID1" 
于 2013-08-23T00:26:26.393 回答