Click here to Skip to main content
15,881,652 members
Articles / Programming Languages / C#
Alternative
Tip/Trick

Use wildcard characters * and ? to compare strings

Rate me:
Please Sign up or sign in to vote.
5.00/5 (2 votes)
20 Feb 2012CPOL 9.2K   2  
How about transforming first into a Regex and then letting the Regex do the work? E.g.:public static Regex GetRegex(string wildcard){ string pattern = Regex.Replace(wildcard, @"([^?*]+)?([?*])?", m => Regex.Escape(m.Groups[1].Value) +...

How about transforming first into a Regex and then letting the Regex do the work? E.g.:


C#
public static Regex GetRegex(string wildcard)
{
    string pattern = Regex.Replace(wildcard, @"([^?*]+)?([?*])?",
                 m => Regex.Escape(m.Groups[1].Value)
                    + (m.Groups[2].Value == "?"
                    ? "."
                    : m.Groups[2].Value == "*"
                    ? ".*?"
                    : ""));
   return new Regex(pattern, RegexOptions.Compiled);
}
...
string wildcard = "..."; // E.g. "a$bc?ef*?z?*a";
var regex = GetRegex(wildcard);
...
string input = "...";
if (regex.Match(input).Success)
{
    ...
}

This could be an alternative approache depending on the situation. E.g., if you get the wildcard from outside, and if you apply the same pattern to many elements.


It would be interesting to see a performance comparison...



[EDIT]
I've adjusted the "*" wildcards by non-greedy match since this emulates more closely the wildcard behaviour.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Founder eXternSoft GmbH
Switzerland Switzerland
I feel comfortable on a variety of systems (UNIX, Windows, cross-compiled embedded systems, etc.) in a variety of languages, environments, and tools.
I have a particular affinity to computer language analysis, testing, as well as quality management.

More information about what I do for a living can be found at my LinkedIn Profile and on my company's web page (German only).

Comments and Discussions

 
-- There are no messages in this forum --