2014-12-16 3 views
0

Я создаю свой собственный форум. У меня проблема с цитированием сообщений. Я знаю, как добавить котировочное сообщение в текстовое поле, но я не могу понять, как извлечь значения из строки после публикации. В текстовом поле у ​​меня есть что-то вроде этого:Извлеките несколько значений из строки, используя C#

[quote IdPost=8] Some quoting text [/quote] 

[quote IdPost=15] Second quoting text [/quote] 

могли бы Вы сказать, что это самый простой способ, чтобы извлечь все «IdPost» номера из строки после отправки формы?.

+0

Вы хотите номер на [quote] или строку между [quote] [/ quote]? – aloisdg

+0

Номера. Я буду справляться с остальными. – Shagohad

+0

Хорошо, я отредактирую свой ответ. – aloisdg

ответ

4

с помощью регулярных выражений

@"\[quote IdPost=(\d+)\]" 

что-то вроде

Regex reg = new Regex(@"\[quote IdPost=(\d+)\]"); 
foreach (Match match in reg.Matches(text)) 
{ 
    ... 
} 
+0

Спасибо! Я попробую это, но выглядит точно, что мне нужно. – Shagohad

+1

Обратите внимание, что поскольку 'MatchCollection' реализует только' IEnumerable', 'match' будет' object', если вы не добавите '.OfType ()' – David

+0

@Aravol хороший улов, думаю, я не могу просто быть ленивым и использовать var LOL – Steve

0

Я не знаю точно, что ваша строка, но здесь является регулярное выражение-бесплатное решение с Substring:

using System; 

public class Program 
{ 
    public static void Main() 
    { 
     string source = "[quote IdPost=8] Some quoting text [/quote]"; 

     Console.WriteLine(ExtractNum(source, "=", "]")); 
     Console.WriteLine(ExtractNum2(source, "[quote IdPost=")); 
    } 

    public static string ExtractNum(string source, string start, string end) 
    { 
     int index = source.IndexOf(start) + start.Length; 
     return source.Substring(index, source.IndexOf(end) - index); 
    } 

    // just another solution for fun 
    public static string ExtractNum2(string source, string junk) 
    { 
     source = source.Substring(junk.Length, source.Length - junk.Length); // erase start 
     return source.Remove(source.IndexOf(']')); // erase end 
    } 
} 

Demo on DotNetFiddle

0
var originalstring = "[quote IdPost=8] Some quoting text [/quote]"; 

//"[quote IdPost=" and "8] Some quoting text [/quote]" 
var splits = originalstring.Split('='); 
if(splits.Count() == 2) 
{ 
    //"8" and "] Some quoting text [/quote]" 
    var splits2 = splits[1].Split(']'); 
    int id; 
    if(int.TryParse(splits2[0], out id)) 
    { 
     return id; 
    } 
} 
Смежные вопросы