2016-04-11 3 views
-1

Я пытаюсь написать Regex, который будет выбирать все между пробелами и =.Регулярное выражение между пробелами и =

Из следующих линий

Окно х: класс = "QuiddlerGUI.MainWindow" XMLNS = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"

Я бы хотел (а) выбрать x:Class и xmlns. Самое близкое, что я мог получить, это было, но это не останавливалось в белом пространстве.

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

Я использую регулярное выражение, чтобы попытаться выбрать текст в RichTextBox, чтобы попытаться и изменить цвет текста.

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

[Вы не можете разобрать XML с регулярным выражением] (http://stackoverflow.com/a/1732454/1529630) – Oriol

+0

Просто '\ S + (? ==)' должно быть достаточно (если значения не могут иметь ' = 'sign - тогда вы должны думать о правильном способе разбора строк). –

+0

В C# существует множество инструментов анализа XML. Regex - это средство последней инстанции. –

ответ

1

Попробуйте с (?<=\s)[^=]*

Пояснение:

  • (?<=\s) будет оглядываться на пробельных.

  • [^=]* будет соответствовать всем, пока не будет удовлетворено =.

Regex101 Demo

+0

Я пробовал это RegularExpression = new Regex ("(? <= \ S) [^ =] *", RegexOptions.Compiled | RegexOptions.IgnoreCase), и он дает ошибку непризнанного escape-символа – jsomers89

+0

@ jsomers89: Если вы используете Java использует '\\ s' вместо' \ s'. –

+0

Это C#. Необходимо использовать строковые литералы Verbatim: '@" REGEX_HERE "' –

1

Вы пробовали что-то вроде:

" (.*?)=" 

Это поиск для пространства, за которым следует любой символ, пока не основывает знак равенства, в поисках кратчайшего строки (regexp являются жадными).

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