C #.Разобрать и найти слово в строке - PullRequest
9 голосов
/ 31 мая 2011

У меня есть строка

   bla bla bla bla  <I NEED THIS TEXT> 

Какой самый лучший и быстрый способ получить текст внутри <>?

Ответы [ 9 ]

6 голосов
/ 31 мая 2011
int start = s.IndexOf("<") + 1;
int end = s.IndexOf(">",start);

string text = s.Substring(start,end - start);
3 голосов
/ 31 мая 2011
Regex.Match(input, "<(.*)>").Groups[1].Value
3 голосов
/ 31 мая 2011
var s = "bla bla bla bla  <I NEED THIS TEXT> ";
Console.WriteLine(s.Substring(s.IndexOf('<') + 1, s.IndexOf('>') - s.IndexOf('<') - 1));
3 голосов
/ 31 мая 2011

Используйте Substring с индексами < и >, полученными как IndexOf.

2 голосов
/ 31 мая 2011

Будет ли вложение?Два ответа выше приведут к разным результатам:

static void Main()
{
    string s = "hello<I NEED <I NEED THIS TEXT> THIS TEXT>goodbye";

    string r = Regex.Match(s, "<(.*)>").Groups[1].Value;

    int start = s.IndexOf("<") + 1;
    int end = s.IndexOf(">", start);
    string t = s.Substring(start, end - start);

    Console.WriteLine(r);
    Console.WriteLine(t);

    Console.ReadKey();
}
2 голосов
/ 31 мая 2011
var input = "bla bla bla bla  <I NEED THIS TEXT> ";

var match = Regex.Match(input, @".*?<(?<MyGroup>.*?)>");
if (match.Success)
    var text = match.Groups["MyGroup"].Value;
1 голос
/ 31 мая 2011

Использование string.SubString и IndexOf mwthods будет работать только в том случае, если «<» и «>» - это начало и конец нужного вам текста.Если эти символы будут включены до начала реального текста, вы не получите правильную строку.

Лучше всего использовать регулярные выражения.

1 голос
/ 31 мая 2011

Без регулярного выражения и проверки сортов:

var data = "bla bla bla bla <I NEED THIS TEXT>";

int start = 0, end = 0;
if ((start = data .IndexOf("<")) > 0 &&
    (end = data .IndexOf(">", start)) > 0)
{
    var result = data .Substring(start + 1, end - start - 1);
}
0 голосов
/ 31 мая 2011
var input = "bla bla bla bla  <I NEED THIS TEXT>";
Match match = Regex.Match(input, @"<([^>]*)>");
if (match.Success)
{
    // Do some with match.Groups[1].Value;
}
...