2015-03-10 5 views
5

Was ist der beste Weg, um eine Zeichenkette auf ein nicht maskiertes Zeichen aufzuteilen? Eg. spalten dieses (raw) stringGetrennte Zeichenkette bei nicht maskiertem Zeichen in D

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

auf, so dass es dieses Array erzeugt '':

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

std.regex.split das Richtige zu fast zu sein scheint. Es gibt jedoch ein Problem, dieser Code entspricht dem richtigen Teilzeichen, verbraucht aber auch das letzte Zeichen auf dem linken Teil.

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

Die ganze Regex auf Split entfernt, so dass diese Anordnung ist das Ergebnis:

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

Was ist der beste Weg ist, um das erste Array zu erhalten, ohne selbst den String iterieren?

+0

die lang Sie laufen? –

+0

bearbeitet den Titel – weltensturm

Antwort

10

eine negative Lookbehind Verwendung:

(?<!\\)\!