I have a small project where I have an input sentence where it is possible for the user to specify variations:
The {small|big} car is {red|blue}
Above is a sample sentence i want to split into 4 sentences, like this:
- The small car is red
- The big car is red
- The small car is blue
- The big car is blue
I can’t seem to wrap my mind around the problem. Maybe someone can helt me pls.
Edit
Here is my initial code
Regex regex = new Regex("{(.*?)}", RegexOptions.Singleline);
MatchCollection collection = regex.Matches(richTextBox1.Text);
string data = richTextBox1.Text;
//build amount of variations
foreach (Match match in collection)
{
string[] alternatives = match.Value.Split(new char[] { '|', '{', '}' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string alternative in alternatives)
{
//here i get problems
}
}
It sounds like you need a dynamic cartesian function for this. Eric Lippert’s blog post written in response to Generating all Possible Combinations.
Firstly, we need to parse the input string:
then the input string should be modified to be used in
string.Format-like functions:then we need to find all the matches and to apply Eric’s excellent
CartesianProductextension method:this will produce:
and, finally, the
CartesianProductmethod (taken from here):