2016-06-13 4 views
0

У меня есть строка:Разбивает строку между двумя символами

string myString = "^25121261064300000000000387?;XXXXXXXXXXXXXXXX=25121261064338700000?"; 

Мне нужно разбить строку, чтобы получить только цепь в пределах символов ; и =.

Ожидаемый результатXXXXXXXXXXXXXXXX

Любая идея, как отдельный от 2 символов?

+6

Вы пробовали, например, регулярное выражение? '\; (. *) \ =' например? или просто два 'string.IndexOf'? или что-нибудь? –

+1

вы должны использовать функцию 'string.Split() вместе со строкой. Replace()' это не так сложно – MethodMan

ответ

5

Вы можете сказать, как показано ниже, разделив его два раза на конкретных персонажей

string result = (myString.Split(';')[1]).Split('=')[0] 
2

на основе MSDN:

using System; 
using System.Text.RegularExpressions; 

class Example 
{ 
    static void Main() 
    { 
     string text = "^25121261064300000000000387?;XXXXXXXXXXXXXXXX=25121261064338700000?"; 
     string pat = @"\;(.*)\="; 

     Regex r = new Regex(pat, RegexOptions.IgnoreCase); 

     Match m = r.Match(text); 
     int matchCount = 0; 
     while (m.Success) 
     { 
     Console.WriteLine("Match"+ (++matchCount)); 
     for (int i = 1; i <= 2; i++) 
     { 
      Group g = m.Groups[i]; 
      Console.WriteLine("Group"+i+"='" + g + "'"); 
      CaptureCollection cc = g.Captures; 
      for (int j = 0; j < cc.Count; j++) 
      { 
       Capture c = cc[j]; 
       System.Console.WriteLine("Capture"+j+"='" + c + "', Position="+c.Index); 
      } 
     } 
     m = m.NextMatch(); 
     } 
    } 
} 
+2

Я бы не по умолчанию для RegEx для простого подстрочного соответствия. Это универсальный шаблон, который означает, что он менее эффективен, чем алгоритмы, адаптированные к конкретному шаблону. –

+2

@ Эрик, конечно, счетчик: большинство двигателей регулярных выражений фактически оптимизируют довольно хорошо для тривиальных сценариев ... Не так эффективно, конечно; но обычно не ужасно –

+0

@MarcGravell: Я уверен, что вы правы, и для 99 +% вариантов использования любое решение будет работать нормально. Сложность кода решения RegEx и индивидуального решения аналогичны, поэтому я думал, что стоит упомянуть о будущих посетителях, которые могут извлечь выгоду из небольшой производительности. –

2

Вы можете использовать LINQ с помощью SkipWhile и TakeWhile методы:

string myString = "^25121261064300000000000387?;XXXXXXXXXXXXXXXX=25121261064338700000?"; 
var result = string.Join("",myString.SkipWhile(c => c != ';') 
            .Skip(1).TakeWhile(c=>c != '=')); 

OutPut:

XXXXXXXXXXXXXXXX

1

Как вышло, что не один упомянул String.split метод?

string[] splited = myString.Split(new char[] {'=', ';'}); 

Ожидаемый выход должен находиться в середине массива.

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