Regex соответствует строке

-4

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

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

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

спросил(а) 2015-08-12T17:28:00+03:00 5 лет, 8 месяцев назад
0
87

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

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("'"));

ответил(а) 2015-08-12T17:31:00+03:00 5 лет, 8 месяцев назад
61

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 );

ответил(а) 2015-08-12T17:41:00+03:00 5 лет, 8 месяцев назад
63

String StartsWith EndsWith методы должны делать трюк:


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
}
}

ответил(а) 2015-08-12T17:37:00+03:00 5 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема