2013-01-03 2 views
-2

У меня есть эта строка ...C# Расщепление конкретной строки для конкретных данных

lg-270-110.sh-300-110.hd-180-1.hr-155-61.ea-1403-62.cc-3007-110-110.ch-220-63.ca-3084-64-64 

Строка постоянно меняется ...

Как бы я получить данные между двумя определенными точками ...

Мне действительно нужно извлечь hd-180-1. и hr-155-61. и удалите их из строки

Но вы видите, что данные не всегда hd-180-1. - Это может быть hd-171-4. - Поэтому мне нужно удалить данные между HD и. программно

Как я могу это сделать?

+1

Вы пробовали RegEx? –

+0

Возможный дубликат [PHP - Сброс определенной строки из строки] (http://stackoverflow.com/questions/11382611/php-strip-a-specific-string-out-of-a-string) –

+0

Один подход это очень гибкий, но, возможно, недостаточно эффективный, чтобы использовать мою [sscanf() Замена для .NET] (http://www.blackbeltcoder.com/Articles/strings/a-sscanf-replacement-for-net). Он позволяет вам определять местозаполнители и извлекать все необходимые вам части. –

ответ

1

это выглядит как работа для регулярных выражений

string s = "lg-270-110.sh-300-110.hd-180-1.hr-155-61.ea-1403-62.cc-3007-110-110.ch-220-63.ca-3084-64-64"; 

s = Regex.Replace(s, @"hd.*?\.", ""); 
s = Regex.Replace(s, @"hr.*?\.", ""); 
Console.WriteLine(s); 

here's my favorite regex reference

вы также можете использовать регулярное выражение для соответствия вашему шаблону

string s = "lg-270-110.sh-300-110.hd-180-1.hr-155-61.ea-1403-62.cc-3007-110-110.ch-220-63.ca-3084-64-64"; 

Regex r = new Regex(@"hd.*?\."); 
Console.WriteLine(r.Match(s).Value); 
0

Возможно, вам понадобится использовать IndexOf и Substring (или, возможно, регулярные выражения). Вам действительно нужно понять и объяснить точно, как ваша строка структурирована, чтобы извлечь нужные данные.

IndexOf ищет строки. Он возвращает первое вхождение буквы в строке. Он также может найти подстроку в строке. Он часто используется в циклах. Он возвращает отрицательный, когда ничего не найдено.

Подстрока выдержки строки. Для этого требуется указать начальный индекс и длину. Затем он возвращает совершенно новую строку с символами в этом диапазоне

 string data = "lg-270-110.sh-300-110.hd-180-1.hr-155-61.ea-1403-62.cc-3007-110-110.ch-220-63.ca-3084-64-64"; 

     int indexOf_hd = data.IndexOf("hd"); 
     int indexOf_fullstop = data.IndexOf(".", indexOf_hd); 

     string extracteddata = data.Substring(indexOf_hd, indexOf_fullstop - indexOf_hd); 

     // extracteddata = hd-180-1 

Также обратите внимание на examples with IndexOf и examples with substring

0

, возможно, вы также можете использовать String.split:

List<string> list = yourString.Split("."); 
List<string> keeping = list.Where(s => !s.Contains("hd") && !s.Contains("hr")) 
return String.Join(".", keeping); 
+0

Иногда это может быть третий элемент, случайный, который вы видите. – x06265616e

+0

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

+0

@ x06265616e, я отредактировал ответ, чтобы отразить случайное местоположение. –

0

Вы можете использовать регулярное выражение

string data = "lg-270-110.sh-300-110.hd-180-1.hr-155-61.ea-1403-62.cc-3007-110-110.ch-220-63.ca-3084-64-64"; 

//Match things that are preceded by a dot (.) (or the beginning of input) 
// that begin with 'h' followed by a single letter, then dash, three digits, 
// a dash, at least one digit, followed by a period (or the end of input) 
var rx = new Regex(@"(?<=(^|\.))h\w-\d{3}-\d+(\.|$)"); 

//Get the matching strings found 
var matches = rx.Matches(data); 

//Print out the matches, trimming off the dot at the end 
foreach (Match match in matches) 
{ 
    Console.WriteLine(match.Value.TrimEnd('.')); 
} 

//Get a new copy of the string with the matched sections removed 
var result = rx.Replace(data, "").TrimEnd('.'); 
0

Я нашел функцию онлайн, которая работает ...

  public static string RemoveBetween(string s, string begin, string end) 
      { 
       Regex regex = new Regex(string.Format("{0}{1}", begin, end)); 
       return regex.Replace(s, string.Empty); 
      } 
+2

Что такое 'begin' и' end' вы переходите к этой функции? – I4V

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