WildCard (*)를 지원하는 System.String Comparer
-
19-09-2019 - |
문제
WildCard (*) 및 Incase-Insenitivity를 지원하는 String Comparer가있는 빠른 .NET 클래스/라이브러리를 찾고 있습니다. 어떤 아이디어?
올바른 솔루션이 없습니다
다른 팁
regexoptions.ignorecase와 함께 Regex를 사용할 수 있습니다. 그런 다음 ISMATCH 방법과 비교할 수 있습니다.
var wordRegex = new Regex( "^" + prefix + ".*" + suffix + "$", RegexOptions.IgnoreCase );
if (wordRegex.IsMatch( testWord ))
{
...
}
이것은 일치합니다 prefix*suffix
. 대안으로 startswith 또는 endswith를 사용하는 것을 고려할 수도 있습니다.
또는 이러한 확장 된 기능을 사용할 수 있습니다.
public static bool CompareWildcards(this string WildString, string Mask, bool IgnoreCase)
{
int i = 0;
if (String.IsNullOrEmpty(Mask))
return false;
if (Mask == "*")
return true;
while (i != Mask.Length)
{
if (CompareWildcard(WildString, Mask.Substring(i), IgnoreCase))
return true;
while (i != Mask.Length && Mask[i] != ';')
i += 1;
if (i != Mask.Length && Mask[i] == ';')
{
i += 1;
while (i != Mask.Length && Mask[i] == ' ')
i += 1;
}
}
return false;
}
public static bool CompareWildcard(this string WildString, string Mask, bool IgnoreCase)
{
int i = 0, k = 0;
while (k != WildString.Length)
{
if (i > Mask.Length - 1)
return false;
switch (Mask[i])
{
case '*':
if ((i + 1) == Mask.Length)
return true;
while (k != WildString.Length)
{
if (CompareWildcard(WildString.Substring(k + 1), Mask.Substring(i + 1), IgnoreCase))
return true;
k += 1;
}
return false;
case '?':
break;
default:
if (IgnoreCase == false && WildString[k] != Mask[i])
return false;
if (IgnoreCase && Char.ToLower(WildString[k]) != Char.ToLower(Mask[i]))
return false;
break;
}
i += 1;
k += 1;
}
if (k == WildString.Length)
{
if (i == Mask.Length || Mask[i] == ';' || Mask[i] == '*')
return true;
}
return false;
}
비교유 가드 카드는 여러 와일드 카드 패턴과 문자열을 비교하고 비교는 단일 와일드 카드 패턴과 문자열을 비교합니다.
예제 사용 :
if (Path.CompareWildcards("*txt;*.zip;", true) == true)
{
// Path matches wildcard
}
또는 다음을 시도 할 수 있습니다
class Wildcard : Regex
{
public Wildcard() { }
public Wildcard(string pattern) : base(WildcardToRegex(pattern)) { }
public Wildcard(string pattern, RegexOptions options) : base(WildcardToRegex(pattern), options) { }
public static string WildcardToRegex(string pattern)
{
return "^" + Regex.Escape(pattern).
Replace("\\*", ".*").
Replace("\\?", ".") + "$";
}
}
제휴하지 않습니다 StackOverflow