2016-04-11 21 views
-1

Ich versuche, eine Regex zu schreiben, die alles zwischen einem Leerzeichen und = auswählen wird.Regex zwischen Leerraum und =

Aus den folgenden Zeilen

Fenster x: Class = "QuiddlerGUI.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"

Ich möchte es x:Class und xmlns auswählen. Das nächste, was ich bekommen konnte, war das, aber es blieb nicht bei Leerraum.

(?<=)(.*?)(?==)  

Ich bin mit dem regex Text in einem RichTextBox zu versuchen, und wählen Sie die Farbe des Textes, um zu versuchen und zu ändern.

foreach(TextColors color in textColors) 
    { 
     var start = body.Document.ContentStart; 

     while (start != null && start.CompareTo(body.Document.ContentEnd) < 0) 
     { 
      if (start.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text) 
      { 
       var match = color.RegularExpression.Match(start.GetTextInRun(LogicalDirection.Forward)); 

       var textrange = new TextRange(start.GetPositionAtOffset(match.Index, LogicalDirection.Forward), start.GetPositionAtOffset(match.Index + match.Length, LogicalDirection.Backward)); 

       textrange.ApplyPropertyValue(TextElement.ForegroundProperty, color.TextColor); 
        start = textrange.End; 

       } 
       start = start.GetNextContextPosition(LogicalDirection.Forward); 
      } 
     } 
+1

[Sie können XML mit Regex nicht analysieren] (http://StackOverflow.com/a/1732454/1529630) – Oriol

+0

Nur '\ S + (? ==)' sollte genug sein (außer die Werte können ein ' = 'Zeichen - dann sollten Sie über eine korrekte Art der Syntaxanalyse der Strings nachdenken. –

+0

In C# sind viele XML-Analysetools verfügbar. Regex ist nur ein Mittel letzter Instanz. –

Antwort

1

mit (?<=\s)[^=]*

Erläuterung Versuchen:

  • (?<=\s) für ein Leerzeichen Blick hinter werden.

  • [^=]* wird alles übereinstimmen, bis eine = erfüllt ist.

Regex101 Demo

+0

Ich habe versucht, diese RegularExpression = new Regex ("(? <= \ S) [^ =] *", RegexOptions.Compiled | RegexOptions.IgnoreCase), und es gibt einen Fehler der nicht erkannten Escape-Zeichen – jsomers89

+0

@ jsomers89: Incase Sie verwenden Java benutzt '\\ s' anstelle von' \ s'. –

+0

Es ist C#. Verbatim String-Literale sollten verwendet werden: '@" REGEX_HERE "' –

1

Haben Sie versucht, so etwas wie:

" (.*?)=" 

Es ist für einen Raum suchen, ein beliebiges Zeichen folgt, bis er ein Gleichheitszeichen gründet, für die kürzeste Zeichenfolge suchen (regexp sind gierig).

Verwandte Themen