Regex 在以“开始”的字符串中查找一个单词;PID";并返回单词(在R中)

Regex 在以“开始”的字符串中查找一个单词;PID";并返回单词(在R中),regex,r,Regex,R,我需要搜索大量字符串以找到以PID开头的“单词”。PID是一个ID标签,它们都被编号(PID1、PID23等) 要搜索的字符串示例: PID442步行进城 我需要返回特定的ID,以便输出为“PID442”。我试图在R中执行此操作。str尝试以下操作: str <- c("PID442 WALKS TO TOWN", "I AM PID1") gsub(".*\\b(PID\\d+)\\b.*", "\\1", str) #[1] "PID442" "PID1" > library

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

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

我需要返回特定的ID,以便输出为“PID442”。我试图在R中执行此操作。

str尝试以下操作:

str <- c("PID442 WALKS TO TOWN", "I AM PID1")
gsub(".*\\b(PID\\d+)\\b.*", "\\1", str)
#[1] "PID442" "PID1" 
> library(gsubfn)
> strapply(str, "\\bPID\\d+\\b", c, perl = TRUE, simplify = TRUE)
[1] "PID442" "PID1" 
还有一种方法(我希望)更简单一些:

> str <- 'PID442 WALKS TO TOWN'
> regmatches(str, regexpr('\\<PID\\w*\\>', str))
[1] "PID442"
>str regmatches(str,regexpr('\\',str))
[1] “PID442”
regexpr
获取第一个匹配项在
str
中的位置。(如果要在字符串中查找多个匹配项,就像在其他一些答案中一样,只需将
regexpr
替换为
gregexpr
regmatches
返回与匹配项对应的字符串

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

每个字符串是否都包含一个PID?它可以包含多个吗?在这些可能性下,您的输出应该是什么样子?谢谢!昨晚我在看正则表达式,但以前从未使用过它们。@user2709239,没问题,如果您在我的解决方案中仍然发现一些不清楚的地方,请告诉我。别忘了,你可以通过点击左边的勾号来接受其中一个答案。在数据上使用它之后,接受任何大写字母P、I或D的单词似乎都会遇到问题。我无法解决这个问题。@user2709239,是的,实际上不只是P,I或D。它接受完整字符串,以防根本没有PID,因为您没有提到它是可能的,以及在这种情况下需要什么输出(NA,列表中的NULL或其他内容)。我在所有数据上都尝试了这个方法,看起来效果很好。谢谢