-2

こんにちは、次の文字列パターンがあります。

*A

*BA*

AB

*GN*BN

入力文字列でそのようなパターンを見つける必要があります。一致する場合は、それに応じて値を置き換える必要があります。

どうすれば正規表現でそれを行うことができますか? 上記のパターンは、XML ファイルからのものです。だからダイナミックです。 *ここではワイルドカード文字を意味します。それで、

*Aで終わる文字列を意味しますA

*BA*の間に含まれる文字列を意味しますBA

AB正確なAB文字列を意味します。

4

3 に答える 3

3

取得しているパターンはすでに正規表現にかなり近いように見えますが、繰り返すことができるのは「何でも」であることを示すために.、の前にa がないだけです ( Repetition in regexes )。*

static bool PerformMatch(string rawPattern, string value)
{
    var adjustedPattern = rawPattern.Replace("*", ".*");
    var regex = new Regex(adjustedPattern);
    var match = regex.Match(value);
    return match.Success && match.Length == value.Length;
}

static void Main()
{
    Console.WriteLine(PerformMatch("*BA*", "Oh?"));  //false
    Console.WriteLine(PerformMatch("*BA*", "BAH!")); //true
    Console.ReadLine();
}
于 2012-11-28T11:10:52.880 に答える
2

次の関数は、基準に適合する必要があります。

public bool CustomMatch(string input, string pattern)
{
    pattern = "^" + Regex.Escape(pattern).Replace(@"\*", ".*") + "$";
    return Regex.IsMatch(input, pattern);
}
于 2012-11-28T11:13:11.480 に答える
0

ワイルドカード文字は単一の文字を示していますか、*それとも複数の文字にすることができますか? 単一の文字を想定しています。また、「ワイルドカード文字」[A-Z]

^(AB|^[A-Z]A|^[A-Z]BA[A-Z]|^[A-Z]GN[A-Z]BN)
于 2012-11-28T11:09:47.053 に答える