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

wel*_*urm 5 regex string split d

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

`example string\! it is!split in two parts`
Run Code Online (Sandbox Code Playgroud)

在'!'上,以便生成这个数组:

["example string! it is", "split in two parts"]
Run Code Online (Sandbox Code Playgroud)

std.regex.split似乎几乎是正确的事情.但是存在一个问题,此代码与正确的拆分字符匹配,但也会消耗左侧部分的最后一个字符.

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

拆分时删除整个正则表达式匹配,因此该数组是结果:

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

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

Wik*_*żew 10

使用负面的lookbehind:

(?<!\\)\!