2011-03-08 2 views
2

I'v получил кодвопрос о регулярных выражений

s = Regex.Match(item.Value, @"\/>.*?\*>", RegexOptions.IgnoreCase).Value; 

он возвращает строку как «/> тест *>», я могу заменить символы «/>» и «*>», но как я могу вернуть строку без этих символов, только строка 'test' между ними?

ответ

2

Вы можете сохранить части регулярных выражений, поставив () «S вокруг области. так для примера:

// item.Value == "/>test*>" 
Match m = Regex.Match(item.Value, @"\/>(.*?)\*>"); 
Console.WriteLine(m.Groups[0].Value); // prints the entire match, "/>test*>" 
Console.WriteLine(m.Groups[1].Value); // prints the first saved group, "test*" 

Я также удалил RegexOptions.IgnoreCase, потому что мы не имеем дело с любыми буквами конкретно, Что прописной /> выглядеть? :)

2

Вы можете сгруппировать шаблоны внутри regx и получить те от матча

var match= Regex.Match(item.Value, @"\/>(?<groupName>.*)?\*>", RegexOptions.IgnoreCase); 
var data= match.Groups["groupName"].Value 
+2

Вы забыли поместить? перед именем группы. должен быть ? и не Shekhar

+1

также «матч» здесь не указан –

+0

извините за ошибки :) Я был немного спешил. Спасибо –

1

Вы также можете использовать look-ahead and look-behind. Для вашего примера это будет:

var value = Regex.Match(@"(?<=\/>).*?(?=\*>)").Value; 
Смежные вопросы