我正在处理一个正则表达式,其中我的字符串有一系列数字,然后是四个数字,然后命名为重复的倍数。
文本模式是一系列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"
我尝试了各种组合,但我知道我必须遗漏一些关键的东西。
答案 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"