如何以某种方式打印输出

时间:2016-03-25 12:34:40

标签: c# linq token cc

我使用LINQ查询编写了这段代码

 static public void BracesRule(String input)
    {
        //Regex for Braces
        string BracesRegex = @"\{|\}";

        Dictionary<string, string> dictionaryofBraces = new Dictionary<string, string>()
        {
            //{"String", StringRegex},
            //{"Integer", IntegerRegex },
            //{"Comment", CommentRegex},
            //{"Keyword", KeywordRegex},
            //{"Datatype", DataTypeRegex },
            //{"Not included in language", WordRegex },
            //{"Identifier", IdentifierRegex },
            //{"Parenthesis", ParenthesisRegex  },
            {"Brace", BracesRegex },
            //{"Square Bracket", ArrayBracketRegex },
            //{"Puncuation Mark", PuncuationRegex },
            //{"Relational Expression", RelationalExpressionRegex },
            //{"Arithmetic Operator", ArthimeticOperatorRegex },
            //{"Whitespace", WhitespaceRegex }
        };
        var matches = dictionaryofBraces.SelectMany(a => Regex.Matches(input, a.Value)
        .Cast<Match>()
        .Select(b =>
                new
                {
                    Index = b.Index,
                    Value = b.Value,
                    Token = a.Key
                }))
        .OrderBy(a => a.Index).ToList();

        for (int i = 0; i < matches.Count; i++)
        {
            if (i + 1 < matches.Count)
            {
                int firstEndPos = (matches[i].Index + matches[i].Value.Length);
                if (firstEndPos > matches[(i + 1)].Index)
                {
                    matches.RemoveAt(i + 1);
                    i--;
                }
            }
        }
        foreach (var match in matches)
        {
            Console.WriteLine(match);
        }

    }

它的输出是这样的     {Index = 0,Value = {,Token = Brace}

但我希望输出像 {BRACE

1 个答案:

答案 0 :(得分:1)

一种可能性是修改匿名对象 - 从Key(=大括号)和Value(= {或})创建字符串:

string input = "ali{}";
//Regex for Braces
string BracesRegex = @"\{|\}";

Dictionary<string, string> dictionaryofBraces = new Dictionary<string, string>()
{
    {"Brace", BracesRegex }
};
var matches = dictionaryofBraces.SelectMany(a => Regex.Matches(input, a.Value)
            .Cast<Match>()
            .Select(b => String.Format("{0} {1}", b.Value, a.Key.ToUpper())))
            .OrderBy(a => a).ToList();

foreach (var match in matches)
{
    Console.WriteLine(match);
}

输出符合要求:

{ BRACE
} BRACE