What i'm doingI have a string with html information like this:<p> <span class=fieldText fieldId=field-4>Some text</span> this is a test</p>My goal in the method is to create a dictionary with this value:**key**     **value**field-4    Some textThis is the code that i'm using to accomplish my task:public static Dictionary<int,String> getFields(String mensaje)     {        Dictionary<int,String> fields = new Dictionary<int,string>();        Match m = Regex.Match(mensaje, @^(.*?<span .*?>(.*?)</span>.*?)+$, RegexOptions.Singleline);        for (int i = 0; i < m.Groups[2].Captures.Count; i++)        {            String value = m.Groups[1].Captures[i].Value;            Match m2 = Regex.Match(value, ^(.*?fieldId=.*?\(.*?)\>.*?)+$, RegexOptions.Singleline);            String fieldId = m2.Groups[2].Captures[0].Value;            fieldId = fieldId.Replace(field-, String.Empty);            fields.Add(int.Parse(fieldId),m.Groups[2].Captures[i].Value);        }        return fields;    }How can i improve my code?
Extracting text fields from  tags in an HTML message
c#;html;parsing
I know this is Code Review not Rewrite My Code, however I would suggest using a third-party Html parser (like the Html Agility Pack for example) over regular expressions if that's an option. I realize you're doing very trivial parsing here, but from my personal experiences regular expressions grow to unmaintainable status quicker than anything in software development.If you were to use a Html parser, you could do something like this:string htmlToParse = <p><span class=\fieldText\ fieldId=\field-4\>Some text</span> this is a test</p><p><span class=\fieldText\ fieldId=\field-5\>Some more text</span> this is another test</p>;const string ElementToParse = span;const string IdField = FieldId;HtmlDocument htmlDocument = new HtmlDocument();htmlDocument.LoadHtml(htmlToParse);int fieldId = default( int );Dictionary<int,string> fieldValuesTable = (    from        htmlNode in htmlDocument.DocumentNode.DescendantNodes()    where        htmlNode.Name.Equals( ElementToParse, StringComparison.InvariantCultureIgnoreCase )        &&        htmlNode.Attributes.Contains( IdField )    let        id = htmlNode.Attributes[ IdField ].Value    where        Int32.TryParse( id.Substring( id.IndexOf( - ) + 1 ), out fieldId ) // this is stil not ideal,    select        new { Id = fieldId, Text = htmlNode.InnerText }).ToDictionary( f => f.Id, f => f.Text );You get the output:4 : Some text5 : Some more textIMHO, it's much cleaner and maintainable.