Regex split string preserving quotes
c#, regex, split
Solution
As long as there can be no escaped quoted inside quoted strings, the following should work:
splitArray = Regex.Split(subjectString, "(?<=^[^\"]*(?:\"[^\"]*\"[^\"]*)*) (?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
This regex splits on space characters only if they are preceded and followed by an even number of quotes.
The regex without all those escaped quotes, explained:
(?<= # Assert that it's possible to match this before the current position (positive lookbehind):
^ # The start of the string
[^"]* # Any number of non-quote characters
(?: # Match the following group...
"[^"]* # a quote, followed by any number of non-quote characters
"[^"]* # the same
)* # ...zero or more times (so 0, 2, 4, ... quotes will match)
) # End of lookbehind assertion.
[ ] # Match a space
(?= # Assert that it's possible to match this after the current position (positive lookahead):
(?: # Match the following group...
[^"]*" # see above
[^"]*" # see above
)* # ...zero or more times.
[^"]* # Match any number of non-quote characters
$ # Match the end of the string
) # End of lookahead assertion
Problem
I need to split a string like the one below, based on space as the delimiter. But any space within a quote should be preserved. ``` research library "not available" author:"Bernard Shaw" ``` to ``` research library "not available" author:"Bernard Shaw" ``` I am trying to do this in C Sharp, I have this Regex: `@"(?<="")|\w[\w\s]*(?="")|\w+|""[\w\s]*"""` from another post in SO, which splits the string into ``` research library "not available" author "Bernard Shaw" ``` which unfortunately does not meet my exact requirements. I'm looking for any Regex, that would do the trick. Any help appreciated.