2017-03-31 1 views
4

mit habe ich einen Absatz wie folgt: [! #today] [! Zustand]!Regex finden Matches aus einem String mehrere eckigen Klammern

Einige Formulierung für die Prüfung, wo die nicht erfüllt mit diesem Wortschwall [ShowElemIf : // Student/VollständigerName; [[[Text nicht vollständig erkannt]];/Vorname] Aber einfache Tags gefunden mit Alter [! ShowElemIf: // Student/Alter; xml // Student/DOB/@ formatiert; y]

Ich brauche um alle Platzhalter/Tags von oben zu finden, die wie folgt aussehen: [! tag] mit C#. Ich habe versucht, eine Regex, aber es ist nicht in der Lage, das Etikett mit "FullName" Wort wie oben fett hervorgehoben zu finden.

List<string> tags = Regex.Matches(
 
        sampleText.Replace(Environment.NewLine, ""), @"\[!([^]]+)\] \t ") 
 
        .Cast<Match>() 
 
        .Select(x => x.Groups[1].Value) 
 
        .ToList();

diesen regex ich eine unten, aber nicht die markierten finden.

  1. heute
  2. Zustand
  3. ShowElemIf: // Student/Alter; xml // Student/DOB/@ formatiert; y
+0

Warum haben Sie all diesen Leerraum am Ende Ihres Musters? – juharr

+0

@juharr: Ich glaube, es ist eine Eigenart von Visual Studio, ich habe es bereits bei SO gesehen, und habe auch das gleiche Problem gestern beim Einfügen von Text in meine VS. Es ist nur ein Kopier-/Einfüge-Problem. –

+0

Ja. Sie können es als Tippfehler betrachten. Danke @ Wiktor für deine Antwort. – sapatelbaps

Antwort

3

Sie benötigen Bilanzkreise in verwenden. NET Regex:

@"\[!((?:[^][]+|(?<o>\[)|(?<-o>)])*(?(o)(?!)))]" 

Siehe regex demo

Einzelheiten:

  • \[! - eine [! Teilzeichenfolge
  • ((?:[^][]+|(?<o>\[)|(?<-o>)])*(?(o)(?!))) - Capturing Gruppe 1
    • (?: passend - eine Nicht-Erfassung Gruppe mit 3 Alternativen:
      • [^][]+| - 1 oder mehr Zeichen sie als [ und ] oder
      • (?<o>\[)| - ein [ schob in "o" Gruppenstapel oder
      • (?<-o>)] - ein ] subtrahiert von dem "o" Gruppe Stapel
    • )* - null oder mehr Vorkommen
    • (?(o)(?!))) - ein bedingtes Konstrukt überprüft, ob der "o" -Gruppenstapel leer ist. Wenn es leer ist, wird der Abgleich fortgesetzt, andernfalls wird keine Übereinstimmung zurückgegeben.
  • - ein wörtliches schließendes ] Symbol.
Verwandte Themen