在 D 中的未转义字符上拆分字符串

Split string on un-escaped character in D

在未转义字符上拆分字符串的最佳方法是什么? 例如。拆分这个(原始)字符串

`example string\! it is!split in two parts`

在 '!' 上,以便它生成此数组:

["example string! it is", "split in two parts"]

std.regex.split 似乎几乎是正确的。但是有一个问题,这段代码匹配了正确的拆分字符,但也消耗了左边的最后一个字符。

auto text = `example string\! it is!split in two parts`;
return text.split(regex(`[^\]!`)).map!`a.replace("\!", "!")`.array;

整个正则表达式匹配在拆分时被删除,所以这个数组是结果:

["example string! it i", "split in two parts"]

在不自己迭代字符串的情况下到达第一个数组的最佳方法是什么?

使用负面回顾:

(?<!\)\!