views:

112

answers:

5

Is there a way to get all format parameters of a string?

I have this string: "{0} test {0} test2 {1} test3 {2:####}" The result should be a list: {0} {0} {1} {2:####}

Is there any built in functionality in .net that supports this?

A: 

no, there is no built in feature to do this. You'd have to parse them out with a regex or something

Joel Martinez
+2  A: 

You could use a regular expression to find all the substrings matching that pattern.

A regular expression like \{.*?\} would probably do the trick.

Syntactic
Look out for escaped braces, like this: "while(true){{c++;}}" There are no format items there.
Eric Mickelsen
Good point. I don't actually know much about C# or the syntax of its format strings. Is it reasonable to assume that anything enclosed with a single set of braces is a format item?
Syntactic
A: 

It doesn't look like it. Reflector suggests all the format string parsing happens inside StringBuilder.AppendFormat(IFormatProvider, string, object[]).

Daniel Renshaw
A: 

To get a good starting point on finding all the curly braces you should take a look into the FormatWith extension method.

Oliver
A: 

I didn't hear about such a build-in functionality but you could try this (I'm assuming your string contains standard format parameters which start with number digit):

List<string> result = new List<string>();
string input = "{0} test {0} test2 {1} test3 {2:####}";
MatchCollection matches = Regex.Matches(input, @"\{\d+[^\{\}]*\}");
foreach (Match match in matches)
{
    result.Add(match.Value);
}

it returns {0} {0} {1} {2:####} values in the list. For tehMick's string the result will be an empty set.

Alex