比较两个字符串与通配符

时间:2015-10-13 20:36:47

标签: c# regex

我需要比较两个字符串,其中一个使用'*'作为通配符。当我意识到RegEx会更快地执行任务时,我正在考虑使用迭代或递归方法。不幸的是,我是RegEx的新手,我不知道该怎么做。

如果我发送了“He ** o”模式,那么“Hello”和“He7(o”应该返回true,但是“Hhllo”应该返回false。

4 个答案:

答案 0 :(得分:3)

假设您的意思是*是单字符通配符,正则表达式中的正确替换是一个点(.):

string pattern = "He**o";
string regexPattern = pattern.Replace("*",".");

Regex.IsMatch("Hello",regexPattern); // true
Regex.IsMatch("He7)o",regexPattern); // true
Regex.IsMatch("he7)o",regexPattern); // false
Regex.IsMatch("he7)o",regexPattern, RegexOptions.IgnoreCase); // true

您可能还希望使用^(字符串的开头)和$(字符串的结尾)锚定模式:

regexPattern = String.Format("^{0}$", pattern.Replace("*","."));

如果您希望能够使用特殊字符解析输入字符串,则可以转义所有其他字符:

string regexPattern = String.Join(".",pattern.Split("*".ToCharArray())
                                             .Select(s => Regex.Escape(s)).ToArray());

答案 1 :(得分:1)

在for循环中使用char索引比较字符串。如果出现模式char(通配符),则忽略比较并继续下一个比较。

private bool Compare(string pattern, string compare)
{
    if (pattern.Length != compare.Length)
        //strings don't match
        return false;

    for(int x = 0, x < pattern.Length, x++)
    {
        if (pattern[x] != '*')
        {
            if (pattern[x] != compare[x])
                return false;
        }
    }
    return true;
}

答案 2 :(得分:1)

使用&#34; He..lo&#34;

制作正则表达式

这是一个无法识别的案例

Regex r = new Regex("He..o");
string test = "Hhleo";
bool sucess = r.Match(a).Success;

这是一个将被识别的案例

Regex r = new Regex("He..o");
string test = "He7)o";
bool sucess = r.Match(a).Success;

答案 3 :(得分:0)

这正是我今天在php中所做的。当您添加此内容时:

if (pattern[x] != '*' && compare[x] != '*')

然后两个字符串都可以使用通配符。 (希望&&表示逻辑AND,就像php中一样)