Существует ли тривиальный способ разделить строку, сохраняющую разделители? Вместо этого:
let texte = "Ten. Million. Questions. Let celebrate all we've done together.";
let v: Vec<&str> = texte.split(|c: char| !(c.is_alphanumeric() || c == '\'')).filter(|s| !s.is_empty()).collect();
который получается с помощью ["Ten", "Million", "Questions", "Let's", "celebrate", "all", "we've", "done", "together"]
.
Мне хотелось бы что-то, что дает мне:
["Ten", ".", " ", "Million", ".", " ", "Questions", ".", " ", "Let's", " ", "celebrate", " ", "all", " ", "we've", " ", "done", " ", "together", "."]
.
Я пытаюсь использовать такой код (предполагается, что строка начинается с буквы и заканчивается "не-буквой" ):
let texte = "Ten. Million. Questions. Let celebrate all we've done together. ";
let v1: Vec<&str> = texte.split(|c: char| !(c.is_alphanumeric() || c == '\'')).filter(|s| !s.is_empty()).collect();
let v2: Vec<&str> = texte.split(|c: char| c.is_alphanumeric() || c == '\'').filter(|s| !s.is_empty()).collect();
let mut w: Vec<&str> = Vec::new();
let mut j = 0;
for i in v2 {
w.push(v1[j]);
w.push(i);
j = j+1;
}
Это дает мне почти результат, который я написал ранее, но это хорошо:
["Ten", ". ", "Million", ". ", "Questions", ". ", "Let's", " ", "celebrate", " ", "all", " ", "we've", " ", "done", " ", "together", "."]
Однако есть ли лучший способ кодировать это? Поскольку я пытался перечислить v2, но это не сработало, и выглядит грубо для использования j в цикле for.