在 Dart 中,我想使用正则表达式拆分字符串,并在结果列表中包含匹配的分隔符。因此,使用分隔符.,我希望将字符串123.456.789拆分为[ 123, ., 456, ., 789 ].
在某些语言中,如 C#、JavaScript、Python 和 Perl,根据/sf/answers/1096790341/,这可以通过简单地在捕获括号中包含分隔符来完成。该行为似乎记录在https://ecma-international.org/ecma-262/9.0/#sec-regexp.prototype-@@split。
但是,这在 Dart 中似乎不起作用:
print("123.456.789".split(new RegExp(r"(\.)")));
产生与没有括号完全相同的东西。有没有办法split()在 Dart 中像这样工作?否则我想它必须是一个allMatches()实现。
编辑:放入((?<=\.)|(?=\.))正则表达式显然可以完成单个分隔符的工作,具有后视和前瞻。我实际上会有一堆分隔符,我不确定这种方法的效率。有人可以建议是否可以吗?易读性肯定会降低:允许分隔符.and ;,是否需要
((?<=\.)|(?=\.)|(?<=;)(?=;))
or
((?<=\.|;)|(?=\.|;)。测试
print("123.456.789;abc;.xyz.;ABC".split(new RegExp(r"((?<=\.|;)|(?=\.|;))")));
表明两者都有效。