How to split QString and keep the separator in Qt?

Viewed 3090

I have a QString: "{x, c | 0x01}", and I want to split it to 7 tokens as below:

{
x
,
c
|
0x01
}

What's the best way to do it in Qt?

I tried to use QString::split(QRegExp("[\\{\\},|]")), but it DOES NOT keep the separator in the result.

3 Answers

This can be done in a single regular expression, but has to use look-ahead and look-behind.

The expression specified in the question ([\\{\\},|]) will match a 1-character long string consisting of any of the characters {, }, , or |. QString.split will then remove that 1-character long string.

What is needed is to find the zero-character string immediately before each of those separators, using a look-ahead: (?=[\\{\\},|]) and also to find the zero-character string immediately after the separator (?<=[\\{\\},|]).

Combining these gives:

QString::split(QRegularExpression("(?=[\\{\\},|])|(?<=[\\{\\},|])"))

Which will give the desired output: ("{", "x", ",", "c", "|", "0x01", "}")

Related