How to split a string/array with multiple separators?
Joel via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri May 13 23:32:10 PDT 2016
On Wednesday, 16 December 2015 at 15:27:22 UTC, Marc Schütz wrote:
> On Wednesday, 16 December 2015 at 14:47:26 UTC, Dragos Carp
> wrote:
>> On Wednesday, 16 December 2015 at 14:18:28 UTC, Borislav
>> Kosharov wrote:
>>> I want to split a string using multiple separators. In
>>> std.array the split function has a version where it takes a
>>> range as a separator, but it works differently than what I
>>> want. Say if I call it with " -> " it will search for the
>>> whole thing together. I want to pass split a list of
>>> separators say [":", ",", ";"] and if it finds any of those
>>> to split it.
>>>
>>> Sorry if this questions is stupid but I cant find how to do
>>> it.
>>
>>
>> void main()
>> {
>>
>> import std.stdio: writeln;
>> writeln("abc,def;ghi".splitter!(a =>
>> !":,;".find(a).empty).array);
>> }
>
> The call to `array` is unnecessary in this example, and you can
> use the shorter `canFind`:
>
> writeln("abc,def;ghi".splitter!(a => ":,;".canFind(a)));
What about "abc,;;.. def" you get empty strings?
I've come up with this:
import std.stdio : writeln;
import std.algorithm : canFind, splitter, filter;
void main() {
writeln("abc,:def;ghi". // or "abc, def. Ghi"
splitter!(a => " .,:;".canFind(a)).
filter!(a => a.length));
}
More information about the Digitalmars-d-learn
mailing list