0

正規表現を使用して、テキスト ファイル内の特定のプレースホルダーを識別しようとしています。
すべてのプレースホルダーは % で始まり、% で終わります。
% を開いた後の最初の単語は、オプションの属性を持つことができるプレースホルダー名です (デフォルト以外の書式設定プロパティを考えてください)。

いくつかのサンプルは次のとおりです。

%MyVariable% --> 目的の出力は Name=MyVariable 、Attribute=''
%MyVariable:uppercase% --> 目的の出力は Name=MyVariable 、Attribute='uppercase'
%MyVariable:maxlen(20)% --> 目的の出力is Name=MyVariable , Attribute='maxlen(20)'
%MyVariable:words(1,2)% --> 目的の出力は Name=MyVariable , Attribute='words(1,2)' です

このタスクを達成するために正しい正規表現を構築するのを手伝ってくれる人はいますか?

C# と .NET Framework v4.0 を使用しています

ありがとうございました

4

1 に答える 1

0

次のパターンは、すべてのプレースホルダーをキャッチします。

%(?<name>\w+)(?<attribute>:.*?)?%

グループ名で値を取得します: nameおよびattribute

例:

var matches = Regex.Matches(input, @"%(?<name>\w+)(?<attribute>:.*?)?%");
foreach (Match match in matches)
{
    var name = match.Groups["name"].Value;
    var attribute = match.Groups["attribute"].Value;
    Console.WriteLine(
        string.Format("Name={0}, Attribute='{1}'", name, attribute));
}

%説明: パターンは、プレースホルダーのように始まり、終わります。内部では、構文を使用して名前を持つ 2 つのグループを定義します(?<group_name>some_pattern_here)。最初のグループは、すべての英数字を でキャッチし\w+ます。少なくとも 1 文字は必要です。%2 番目のグループは、使用するまですべてのシンボルをキャッチし.*?ます。グループは存在する場合と存在しない場合があるため、?その後に付けます。それでおしまい。視覚的には次のようになります。

%           MyVariable                 :  words(1,2)     %
% (?<name>     \w+     ) (?<attribute> :     .*?     )?  %

すべての特殊文字を理解するには、MSDNの正規表現リファレンスをお読みください。

于 2013-02-22T10:14:53.300 に答える