2010-11-25 2 views
1

Я пытаюсь создать регулярное выражение для соответствия файла CSV записей в виде:Regex спичка CSV файл

optional value, , ,, again some value; this is already, next record; 

В настоящее время существует верхний предел запятых (10) разделение атрибутов каждой записи и неограниченное количество ;, разделяющее каждую запись. Значения могут быть или не быть. Я неопытный с регулярным выражением, и мои усилия пока бесполезны. Пожалуйста помоги. Если необходимо, я расскажу о более подробной информации.

EDIT

Я хочу, чтобы убедиться, что файл находится в требуемой форме и получить количество записей в нем.

+0

Что вы хотите, чтобы результат был? – 2010-11-25 14:28:37

+0

Если у вас большой набор записей, я предлагаю не использовать Regex, поскольку его производительность затмевается ручным интеллектуальным анализом, если только вас не интересует изучение Regex. – BeemerGuy 2010-11-25 14:29:59

+0

Имеет ли файл скрытые запятые или точки с запятой, например. `А, б, "с1, с2 ;;", д;`? Если нет, вы можете разделить на `;` для каждой записи, а затем разделить на `,` (или просто посчитать точки с запятой). – Kobi 2010-11-25 14:30:17

ответ

1

Вам действительно нужно использовать регулярные выражения для этого? Может быть, немного переборщит. Я бы просто выполнил один String.Split(), чтобы получить записи, а затем еще одну String.Split() для каждой записи, чтобы получить значения. Также довольно легко получить количество элементов и т. Д.

Если вы действительно хотите использовать регулярные выражения, я бы снова использовал два шага: /(.*?);/, чтобы получить наборы данных; /(.*?)[,;]/, чтобы получить значения.

Может быть, возможно, с одним регулярным выражением, но я бы подумал об этом излишестве (так как вам нужно найти вспомогательные соответствия и т. Д., Определить их родительскую запись и т. Д.).

Экранированные символы были бы другой вещью, но скорее подобны: например. /(.*?[^\\]);/

1

попробовать это

bool isvalid = csv.Split(';') 
        .Select(c => c.Split(',') 
         .Count()) 
        .Distinct() 
        .Count() == 1; 
Смежные вопросы