2015-08-12 4 views
-1

У меня есть массив строк со следующими данными:Regex соответствие строки

'STSO/82465' 
'CPB' 
550 
'B' 
'IEC2' 
'IEC2' 
50 
525 
680 
1550,1175 
'500000/V3' 
'23585/V3' 
'' 
etc... 

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

+2

Почему регулярное выражение? Пройдите через каждую строку и сохраните те, содержащие '' '? – Chris

+0

@ Крис: Я думаю, OP отметил их только для нас. –

+0

@TimSchmelter Угадайте, что может быть так. Будем надеяться, что нет никаких строк, которые бы были все цифры тогда ..! – Chris

ответ

3

Зачем вам нужно регулярное выражение?

double d; 
string[] noDoubles = Array.FindAll(arr, s => !double.TryParse(s, out d)); 

это принимает десятичный разделитель текущей культуры. Вы можете изменить его, если используете перегрузку double.TryParse. Кажется, это , для вас, как предлагают ваши данные.

Если вы хотите, чтобы точку в качестве десятичного разделителя:

Array.FindAll(arr, s => !double.TryParse(s, NumberStyles.Any, NumberFormatInfo.InvariantInfo, out d)); 

Если не-двойники действительно начать все с ' вы также могли бы сделать проще:

string[] noDoubles = Array.FindAll(arr, s => s.StartsWith("'")); 
+0

Есть ли аналогичный метод, чтобы получить только парные? – user3290117

+0

@ user3290117: да, либо подход 'double.Parse' (обратите внимание на отсутствующий'! '):' Array.FindAll (arr, s => double.TryParse (s, out d)); 'или' Array.FindAll (arr, s =>! s.StartsWith ("'"))) –

1

String «s StartsWithEndsWith методы должны сделать трюк:

var tab = new[] 
     { 
      "'STSO/82465'", 
      "'CPB'", 
      "550", 
      "'B'", 
      "'IEC2'", 
      "'IEC2'", 
      "50", 
      "525", 
      "680", 
      "1550,1175", 
      "'500000/V3'", 
      "'23585/V3'" 
     }; 
     foreach (var s in tab) 
     { 
      if (s.StartsWith("'") && s.EndsWith("'")) 
      { 
       //use the s 
      } 
     } 
1

LINQ один вкладыш:

var linesWithStrings = allLines.Where(l => l.StartsWith("'")); 

Или, если вы хотите лишить цитаты:

var linesWithStrings = from s in allLines 
         where s.Length >= 2 && s.StartsWith("'") && s.EndsWith("'") 
         select s.Substring(1, s.Length - 2); 
Смежные вопросы