提取数字序列之间的所有字符串

Extract All Strings between a sequence of numbers

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

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

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) 

它returns一个包含所有数字的字符串

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

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

我们可以把字符串分成四位,去掉第一个,然后trim白色的space。

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"
strsplit(string_to_inspect, " [0-9]+ ")

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

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"