提取R中第二个字母和第三个字母之间的字母

时间:2018-11-12 06:12:49

标签: r regex gsub

我将这个向量称为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),我想提取第二个时段之后的所有内容。

4 个答案:

答案 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"