在一系列数字之间提取所有字符串

时间:2018-04-11 13:08:34

标签: r regex stringr

我正在处理一个正则表达式,其中我的字符串有一系列数字,然后是四个数字,然后命名为重复的倍数。

文本模式是一系列4个数字,然后是一个字符串。我想在四个数字后提取字符串。这四个数字必须出现在字符串之前。在下面的例子中,我不想提取"不是这个",而是想要四个数字后的字符串。

string_to_inspect <-"Not This One 4586 This one 8888 Another one 8955 PS109  8566 Last One"

我理想的提取是一个看起来像的字符向量:

"This one" "Another one" "PS109" "Last One"

我试过了

str_extract_all(pattern = "[0-9]{4}(.*?)", string = string_to_inspect) 

它返回包含所有数字的单个字符串

"4586 This one 8888 Another one 8955 PS109  8566 Last One"

我尝试了各种组合,但我知道我必须遗漏一些关键的东西。

3 个答案:

答案 0 :(得分:3)

我们可以将字符串拆分为四位数,删除第一个数字,然后修剪空白区域。

library(stringr)

str_trim(str_split(string_to_inspect, pattern = "\\s[0-9]{4}\\s")[[1]][-1])
# [1] "This one"    "Another one" "PS109"       "Last One"

答案 1 :(得分:0)

strsplit(string_to_inspect, " [0-9]+ ")

答案 2 :(得分:0)

如果您不希望混有数字的字符串出现问题:

string_to_inspect <-"Not This One 4586 This one 8888 Another one 8955 PS109  8566 Last One"
str2insp <- strsplit(string_to_inspect, ' ')[[1]]
str2insp[!gsub('[[:digit:]]', '', str2insp) == '']

输出

#[1] "Not" "This" "One" "This" "one" "Another" "one" "PS109" "Last" "One"