2016-03-25 2 views
0

я написал этот код, используя 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 = {, Токен = Brace}

Но я хочу быть, как выход {Brace

+0

Не могли бы вы разработать littble немного больше на вашей проблеме? Можете ли вы привести пример своего ввода? Какую именно часть вы хотите изменить (и как)? Выход? – pasty

+0

Это токенизатор. Лексический анализатор Input: {} Выход: {Index = 0, Value = {, Токен = Brace} {Index = 1, Value =}, Токен = Brace} Но я хочу выход быть как выход: {Brace } Brace – Ali

+0

Это ваш код, но вы не можете изменить форматирование вывода? – pasty

ответ

1

можно было бы, чтобы изменить анонимный объект - создать строку из Key (= Brace) и 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 
+0

Работал помощником. Спасибо – Ali

+0

Рад, что ответ помог. – pasty

Смежные вопросы