Regex Ordering Issue

I have the following Regex:

Regex typeTagExtractor = new Regex(@"<input\b[^>]*name=""?(.*?)[""|\s].*?type=""?(.*?)[""|\s].*?[/>|>]", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline);

That works very well at finding input fields as long as the name comes before the type attribute.  I then tried adding in a lookup for the value attribute and nothing worked.  So I added in the options to create:

Regex inputTagExtractor = new Regex(@"<input\b[^>]*[name|type|value]=""?(.*?)[""|\s].*?[name|type|value]=""?(.*?)[""|\s].*?[name|type|value]=""?(.*?)[""|\s].*?[/>|>]",              RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline);

And this actually captures all of the fields - but now I have No Idea what each group contains.  Sometimes Group 1 has the type attribute value, other times the name and yet other times the value.

How can I include the name|type|value in these groups to know what group contains what attribute information?


Who is Participating?
Terry WoodsIT GuruCommented:
Try this:
Regex inputTagExtractor = new Regex(@"<input\b[^>]*(name|type|value)=""?(.*?)[""|\s].*?(name|type|value)=""?(.*?)[""|\s].*?(name|type|value)=""?(.*?)[""|\s].*?[/>|>]",              RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline);

Open in new window

ktolaAuthor Commented:
Great - that creates additional groups I can use to ID things.  Thanks!
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.