2016-07-19 5 views
1

Ich muss Regex für einen Teil meines Projekts verwenden. Ich möchte für AND, OR Operatoren von gegebenen Eingaben trennen. Aber ich brauche keine Operatoren, die in Klammern stehen.Regex für separate Klammern und Operatoren in C#

Beispiel Eingang: C1 OR [C2 und C3] und C4 OR C5 und [C6 und C7 oder C8-] OR C9

Output: oder und oder und oder

anderes Beispiel Eingabe: C1 und C2 sowie [C3 oder C4] und C5

Output: AND AND AND

+4

Also, was Sie .. hast versuchen, wenn Sie „müssen“ regex verwenden, die – BugFinder

+0

wie Hausaufgaben klingt Wenn Sie tief verschachtelten Klammern Gruppen wie ' (((UND UND) ODER c) UND d) ODER e) UND f "Du wirst Kopfschmerzen haben und dazu neigen, die Hölle neu zu definieren. Wenn Sie also Regex vermeiden können, sollten Sie die Verwendung von [Abstract Syntax Tree] (https://en.wikipedia.org/wiki/Abstract_syntax_tree) in Erwägung ziehen. Sie können den endlichen Automaten verwenden, um den Öffnungs-/Schließungsstatus von Klammern und den rekursiven Algorithmus zu verfolgen um deine Schnur in einen Baum zu zerlegen. –

+0

Ich schreibe "muss" Regex verwenden. Weil ich versucht habe, Methoden zu teilen, aber es hat mein Problem nicht gelöst. Auch ich habe versucht, Regex, aber ich kann nicht trennen, welche Klammern und ihre Includes. –

Antwort

0

Wenn Sie nicht verschachtelt Klammern haben Sie es auf diese Weise tun können:

using System; 
using System.Linq; 
using System.Text.RegularExpressions; 

namespace Example 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var input = "1 OR[C2 AND C3] AND C4 OR C5 AND[C6 AND C7 OR C8] OR C9"; 
      var filtered = Regex.Replace(input, "\\[.*?\\]", string.Empty); 
      var result = filtered.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Where(element => element == "OR" || element == "AND"); 
      Console.WriteLine(string.Join(", ", result)); 
      Console.ReadKey(); 
     } 
    } 
} 
+0

So hat mein Problem gelöst. Vielen Dank.. –