2012-01-26 10 views
3

Как заставить Regex остановить поиск после «Target This»?regex синтаксис stop search

HeaderText="Target This" AnotherAttribute="Getting Picked Up" 

Это то, что я пытался

var match = Regex.Match(string1, @"(?<=HeaderText=\").*(?=\")"); 
+3

Почему вы пытаетесь разобрать XML с регулярным выражением в первую очередь? – Tomalak

ответ

2

Квантификатор * является стремится, что означает, что он будет потреблять столько символов, как это может, все еще получая соответствие. Вы хотите ленивый квантор, *?.

Как и в сторону, а не с помощью просмотровых вокруг выражения, как вы сделали здесь, вы можете найти его в целом проще в использовании, захватив группы:

var match = Regex.Match(string1, "HeaderText=\"(.*?)\""); 
              ^^these make a capturing group 

Теперь match соответствует все это, но match.Groups[1] - это просто значение в кавычках.

+0

+1. Хорошая идея с захватом группы. 'match.Groups [0]' - полное совпадение, поэтому первая явная группа - это группа 1. –

1

Plain шаблон регулярного выражения

(?<=HeaderText=").*?(?=") 

или в виде строки

string pattern = "(?<=HeaderText=\").*?(?=\")"; 

или используя дословный строку

string pattern = @"(?<=HeaderText="").*?(?="")"; 

Трюк - знак вопроса после .*. Это означает «как можно меньше», заставляя его останавливаться после первых котировок, которые он встречает.

Обратите внимание, что стенографические строки (введенные с @) не распознают обратную косую черту \ как символ эвакуации. Выбери двойные кавычки, удвоив их.

Примечание для других заинтересованных в регулярных выражениях: Шаблон поиска, используемый находит постион между префиксом и суффиксом:

(?<=prefix)find(?=suffix) 
1

Попробуйте это:

var match = Regex.Match(string1, "HeaderText=\"([^\"]+)"); 
var val = match.Groups[1].Value; //Target This 

UPDATE если есть возможности иметь двойные кавычки в цель, изменить регулярное выражение:

HeaderText=\"(.+?)\"\\s+\\w 

Примечание: это не правильный способ сделать это, если это XML, проверьте System.XML в противном случае, HtmlAgilityPack/How to use HTML Agility pack.