如何从具有特定模式的字符串中提取第一个字符

时间:2017-01-23 12:41:20

标签: r regex

我想提取一个跟随模式的第一个数字(这里是*

c(" 2 X[0,JOHNSON] * 0 0 1 ", 
  " 3 X[0,WILLIAMS]", 
  " * 1 0 1 ", 
  " 4 X[0,JONES] * 0 0 1 " ) 

这里我正在寻找(0,NA,1,0)

我怎样才能在R?

中这样做

2 个答案:

答案 0 :(得分:1)

首先使用%%2提取偶数位置元素,然后删除所有空格,然后删除substr,只提取每个字符串的第一个字符

substr(gsub(" ", "", x[seq_along(x)%%2==0]),1,1)
# [1] "0" "1" "0" "1"

as.numeric(substr(gsub(" ", "", x[seq_along(x)%%2==0]),1,1))
# [1] 0 1 0 1

library(stringr)
s <- str_extract(x, "\\* *\\d")  # looking for this pattern.
substr(s, nchar(s), nchar(s))
# [1] "0" NA  "1" "0"

如果你发现很难理解正则表达式:\\*表示要搜索**表示搜索*和数字{之间的0或更多空格{ {1}}

答案 1 :(得分:0)

我们可以将grepsubstr

一起使用
as.integer(substr(trimws(v1[!grepl("\\[", v1)]),1, 1))
#[1] 0 1 0 1

更新

对于OP的帖子中的新例子

as.integer(sub(".*(?<=[*])\\s*(\\d+).*", "\\1", v2, perl = TRUE))
#[1]  0 NA  1  0
相关问题