を使用するワイルドカード式を変更し、それを正規表現に変換して、いくつかの文字列と一致するかどうかを確認することは可能でしょう*
か?
。
言い換えると、フィルター(大文字と小文字を区別しない)を使用する場合:*bl?e*
これらの文字列に対して:
["Blue", "Black", "Red", "Light blue", "Light black"]
私は手に入れたい:
["Blue, "Light blue"].
正規表現でそれを行う方法を知っている人はいますか?正規表現を使用する以外に、それを行うためのより良い方法はありますか?
私の考えをより明確にするために追加されました...
Ok!...いつものように、私は非常に明確な質問をし、その答えによって私が自分の質問を完全に台無しにしていることに気づいたと思いました。dos('*''?')と同じルールの式(関数のパラメーターとして)に従ってコレクションをフィルター処理する関数を実行したいと思います。正規表現を使うのはいい考えだと思いました。私は正しいですか、正規表現は何ですか?また...私はC#を使用していますが、直接仕事をするものにアクセスできないのではないかと思います。
また、(かなり良い答え)ac#regexステートメントでワイルドカード(任意の文字)を指定するにはどうすればよいですか?
私はついに.netPatternsandPracticesライブラリのGlobクラスを使用しました。
しかし、参考として、これはGlobexpをRegExに変換するための私のコードです。
using System.Text;
using System.Text.RegularExpressions;
namespace HQ.Util.General
{
public class RegexUtil
{
public const string RegExMetaChars = @"*?(){}[]+-^$.|\"; // Do not change the order. Algo depends on it (2 first chars should be dos like wildcard char)
// ******************************************************************
/// <summary>
/// Convert an filter expression with '*' (wildcard any char) and '?' (wildcard on char) into a valid regex and
/// strip any special regex character
/// </summary>
/// <param name="dosLikeExpressionFilter"></param>
/// <returns></returns>
public static string DosLikeExpressionFilterToRegExFilterExpression(string dosLikeExpressionFilter)
{
StringBuilder regex = new StringBuilder();
regex.Append("(?i)"); // Case insensitive
int startIndex = 0;
int count = dosLikeExpressionFilter.Length;
while (startIndex < count)
{
int metaIndex = RegExMetaChars.IndexOf(dosLikeExpressionFilter[startIndex]);
if (metaIndex >= 0)
{
if (metaIndex == 0)
{
regex.Append(".*");
}
else if (metaIndex == 1)
{
regex.Append(".");
}
else
{
regex.Append("\\");
regex.Append(dosLikeExpressionFilter[startIndex]);
}
}
else
{
regex.Append(dosLikeExpressionFilter[startIndex]);
}
startIndex++;
}
return regex.ToString();
}
// ******************************************************************
/// <summary>
/// See 'DosLikeExpressionFilterToRegExFilterExpression' description to see what type of Regex is returned
/// </summary>
/// <param name="dosLikeExpressionFilter"></param>
/// <returns></returns>
public static Regex DosLikeExpressionFilterToRegEx(string dosLikeExpressionFilter)
{
return new Regex(DosLikeExpressionFilterToRegExFilterExpression(dosLikeExpressionFilter));
}
// ******************************************************************
}
}