I can split a string into two based on 2 spaces:
string Line = "1 2";
Regex.Split(Line, " ");
=> 1, 2
I would like to add an exception. Only split if ‘not enclosed by [ ]’ as shown in this example.
string Line = "1 2 [1 2]";
Regex.Split(Line, " ");
=> 1, 2, [1 2]
Can I fairly easily achieve this via regex? By the way, I use .NET.
You could use a lookahead, that asserts that there is no closing
]before the next opening[or the end of the string:This will fail you if you have nested
[...]structures though. Note that the lookahead is not part of the actual match, it just checks what follows without consuming anything. Inside the lookahead I used[^\[\]]which is a negated character class, matching any character except for any kind of square bracket.Also note that this splits on 1 or more spaces. If you want to require at least two, replace
[ ]+with[ ]{2,}and if you want exactly two with[ ]{2}.Further reading on lookarounds.