【发布时间】:2018-04-11 13:08:34
【问题描述】:
我正在处理一个正则表达式,其中我有一个字符串,该字符串有一系列数字,四个数字然后名称重复多个。
文本模式是一系列 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"
我尝试了各种组合,但我知道我一定遗漏了一些关键的东西。
【问题讨论】:
-
您的代码返回
[1] "4586" "8888" "8955" "8566"。这里有什么要求? -
strsplit(string_to_inspect, " \\d{4} "),也许吧? -
@WiktorStribiżew "This one" "Another one" "PS109" "Last One" 字符向量
-
这是预期的结果。对图案有什么要求?它应该匹配什么以及为什么?
-
您可以使用
trimws(str_extract_all(string_to_inspect, "(?<=\\b[0-9]{4}\\s{1,100}).*?(?=\\b[0-9]{4}|$)")[[1]])。或trimws(str_match_all(string_to_inspect, "\\b[0-9]{4}\\s+(.*?)(?=\\b[0-9]{4}|$)")[[1]][,2]).