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