I’m parsing command sequence strings and need to convert each string into a string[] that will contain command tokens in the order that they’re read.
The reason being is that these sequences are stored in a database to instruct a protocol client to carry out a certain prescribed sequence for individual distant applications. There are special tokens in these strings that I need to add to the string[] by themselves because they don’t represent data being transmitted; instead they indicate blocking pauses.
The sequences do not contain delimiters. There can be any amount of special tokens found anywhere in a command sequence which is why I can’t simply parse the strings with regex. Also, all of these special commands within the sequence are wrapped with ${}
Here’s an example of the data that I need to parse into tokens (P1 indicates blocking pause for one second):
"some data to transmit${P1}more data here"
Resulting array should look like this:
{ "some data to transmit", "${P1}", "more data here" }
I would think LINQ could help with this, but I’m not so sure. The only solution I can come up with would be to loop through each character until a $ is found and then detect if a special pause command is available and then parse the sequence from there using indexes.
One option is to use
Regex.Split(str, @"(\${.*?})")and ignore the empty strings that you get when you have two special tokens next to each other.Perhaps
Regex.Split(str, @"(\${.*?})").Where(s => s != "")is what you want.