2016-06-02 4 views
-3

У меня есть текстовый файл:Захват случайных числовых значений

Pool 53-12-74 up 123,55 
Estimate,00: 237-123 not case, send up 
Tech 123-45-6 
Over head 12-22-27-8 beat 
Pool 230-000 get up 
Blink 123-90-88-3 up 
... 

и т.д., где Х представляет собой случайное число. Мне нужно зафиксировать все значения (с символом «-»), который содержит шесть цифр. Я не знаю, как это сделать с помощью одного регулярного выражения.

+2

Так что вам нужно захватить? Строки 'xxx-xxx' или вам действительно нужно числовое значение? Если файл структурирован так, вам даже не нужно регулярное выражение. Вы можете просто «Разделить» каждую строку на пространстве и взять второй элемент. Вы что-то пробовали? –

+0

Нет, файл не имеет сильной структуры. – kate

+0

Итак, что такое * * структура? С примерами, которые вы даете, будет работать простой раскол. Сначала определите свою проблему, и вы на полпути к ее решению. На данный момент кажется, что у вас нет хорошего определения проблемы. –

ответ

1

Вы можете попробовать регулярные выражения и Linq:

String source = 
    "a 123-456 up\nb 12-34-56 up\nc 987-55-4 beat"; 

String pattern = "[0-9]+(-?[0-9]+)*"; 

// [123-456, 12-34-56, 987-55-4] 
String[] matches = Regex.Matches(source, pattern) 
    .OfType<Match>() 
    .Select(match => match.Value) 
    .Where(match => match.Count(c => c >= '0' && c <= '9') == 6) // exactly 6 digits 
    .ToArray(); // optionally, if you want matches as an array 
+0

@kate: вот почему я добавил * Linq * filter: '.Where (match => match.Count (c => c> = '0' && c <= '9') == 6)' –

+0

Это Работа. Как насчет регулярного выражения без Linq? – kate

1

Согласно приведенным данным, Simple Split функция может решить вашу проблему

String[] s = File.ReadAllLines("FilePath"); 
foreach (string item in s) 
{ 
    Console.WriteLine(item.Split(' ')[1]); 
} 
+0

А что? В выводе есть «голова», а все числа - мне нужны значения, которые содержат шесть цифр (подстановочный знак xxx-xxx или xxx-xx-x или xx-xx-xx). – kate

+0

Что такое 'Over head' ?, если глава входит во вторую позицию, вам нужно вручную обработать эту ситуацию и получить доступ к следующему индексу в функции split, чтобы получить Number –

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