首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中从第2期到第3期之间提取字母

在R中从第2期到第3期之间提取字母
EN

Stack Overflow用户
提问于 2018-11-12 06:12:48
回答 4查看 723关注 0票数 1

我有一个叫做Identifier的向量

代码语言:javascript
复制
c("NC.1.OA", "NC.1.OA.0", "NC.1.OA.1", "NC.1.OA.1.a", "NC.1.OA.1.b", 
"NC.1.OA.1.c", "NC.1.OA.2", "NC.1.OA.2.0", "NC.1.OA.3", "NC.1.OA.4"
)

我想提取出OA

我试过:

代码语言:javascript
复制
gsub(".*\\.(.*)\\..*", "\\1", Identifier)

基本上,我想在第二节和第三节之间抽出课文。如果只有两个周期(NC.1.OA),我想提取出第二个周期之后的所有内容。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-11-12 06:19:32

重复(非句点,后面跟着句点)两次,然后捕获非句点,您想要的子字符串在捕获的组中:

代码语言:javascript
复制
Identifier = c("NC.1.OA", "NC.1.OA.0", "NC.1.OA.1", "NC.1.OA.1.a", "NC.1.OA.1.b", 
"NC.1.OA.1.c", "NC.1.OA.2", "NC.1.OA.2.0", "NC.1.OA.3", "NC.1.OA.4"
)
gsub("(?:[^.]+\\.){2}([^.]+).*", "\\1", Identifier)

输出:

代码语言:javascript
复制
[1] "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA"

为了详细说明,(?:[^.]+\\.)是一个组,它匹配非句点字符,然后匹配单个句点.组后面的{2}意味着重复前面的令牌(组)两次--即“非句点,后面跟着句点,然后是非句点,然后是句点”。然后,最终的([^.]+)匹配超过第二个句点的非句点字符,从而匹配第二个句点和第三个句点(或字符串结束)之间的非句点。

票数 3
EN

Stack Overflow用户

发布于 2018-11-12 06:18:20

下面是使用subapply一起使用strsplit的一种替代方法

代码语言:javascript
复制
sapply(Identifier, function(x) unlist(strsplit(x, "\\."))[3])

NC.1.OA   NC.1.OA.0   NC.1.OA.1 NC.1.OA.1.a NC.1.OA.1.b NC.1.OA.1.c 
    "OA"        "OA"        "OA"        "OA"        "OA"        "OA" 
NC.1.OA.2 NC.1.OA.2.0   NC.1.OA.3   NC.1.OA.4 
    "OA"        "OA"        "OA"        "OA" 
票数 1
EN

Stack Overflow用户

发布于 2018-11-12 06:45:41

我们也可以试试stringr

代码语言:javascript
复制
Identifier = c("NC.1.OA", "NC.1.OA.0", "NC.1.OA.1", "NC.1.OA.1.a", "NC.1.OA.1.b", 
               "NC.1.OA.1.c", "NC.1.OA.2", "NC.1.OA.2.0", "NC.1.OA.3", "NC.1.OA.4"
)
library(stringr)
str_extract(Identifier, ".OA.")
# [1] NA     ".OA." ".OA." ".OA." ".OA." ".OA." ".OA." ".OA." ".OA." ".OA."
str_extract(Identifier, "OA")
# [1] "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA"
gsub('\\.', '', str_extract(Identifier, ".OA.?"))
# [1] "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53256738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档