String equals based on Regex C#

I need to compare strings based on what is matched by a regex. So I decided to create a regex to pick the parts of a string that I felt was necessary for consideration for equals. When using a regex and leaving parts of the string outside use “non capturing groups”.   Like “(\d+)(?:st|nd|rd|th)?” with will match a number and optional some postfix like “nd” as in 2nd.

 

public static class StringEqualsRegex
{
    /// <summary>
    /// Equals the strings by regex.
    /// </summary>
    /// <param name="s1">The first string.</param>
    /// <param name="s2">The second string.</param>
    /// <param name="regex">The regex.</param>
    /// <returns><c>true</c> if the captured strings of s1 and s2 match, <c>false</c> otherwise.</returns>
    public static bool EqualsByRegex(this string s1, string s2, Regex regex)
    {   
        /*Extension Method*/
        return EqualStringByRegex(s1, s2, regex);
    }

    /// <summary>
    /// Equals the strings by regex.
    /// </summary>
    /// <param name="s1">The first string.</param>
    /// <param name="s2">The second string.</param>
    /// <param name="regex">The regex.</param>
    /// <returns><c>true</c> if the captured strings of s1 and s2 match, <c>false</c> otherwise.</returns>
    public static bool EqualStringByRegex(string s1, string s2, Regex regex)
    {

        string capturedS1 = GetCapturedString(s1, regex);
        string capturedS2 = GetCapturedString(s2, regex);

        return (capturedS1 != null && capturedS2 != null) && 
            capturedS1.Equals(capturedS2);
    }

    private static string GetCapturedString(string s, Regex regex)
    {
        dynamic match = regex.Match(s);

        if ((match.Success))
        {
            var sb = new StringBuilder();
            for (var i = 1; i <= match.Groups.Count; i++)
            {
                foreach (Capture capture in match.Groups[i].Captures)
                {
                    sb.Append(capture.Value);
                }
            }
            return sb.ToString();
        }

        return null;
    }

} 

.

 

Leave a Reply