我将这个向量称为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"
)
我想提取OA
我尝试过:
gsub(".*\\.(.*)\\..*", "\\1", Identifier)
基本上,我想提取第二个和第三个期间之间的文本。如果只有两个时段(NC.1.OA
),我想提取第二个时段之后的所有内容。
答案 0 :(得分:2)
重复两次(非句号,然后加一个句号),然后捕获非句号,并且您想要的子字符串在该捕获组中:
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)
输出:
[1] "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA"
为了详细说明,(?:[^.]+\\.)
是一个匹配非句点字符然后匹配单个句点的组。组之后的{2}
表示前一个令牌(组)重复两次-即“非周期,后跟一个句点,然后是非周期,然后是句点”。然后,最后的([^.]+)
会匹配第二个句点之后尽可能多的非句点字符,从而匹配第二个句点和第三个句点(或字符串的结尾)之间的非句点。
答案 1 :(得分:1)
这是<body onload="character();">
<div class="board">
<img src="" id="hiddenimageid" />
</div>
</body>
与sub
一起使用strsplit
的替代方法:
apply
答案 2 :(得分:0)
我们也可以尝试stringr
:
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"
答案 3 :(得分:0)
regmatches(Identifier, gregexpr("OA", Identifier))
如果需要向量,请包裹?unlist
unlist(
regmatches(Identifier, gregexpr("OA", Identifier))
)
# [1] "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA" "OA"