2011-12-20 2 views
2

У меня есть файлы, которые что-то типа: «dslkj20111104-BATCH2244_20111113-091347.txt» Мне нужен только «dslkj», а не остальные цифры или цифры или .txt, как это сделать?вырезать только левое большинство букв из строки, только левые буквы

var onlyLetters = new String(fileName.Name.Where(Char.IsLetter).ToArray()); 

Я попробовал это, но это даст мне «.txt» и „партия“, которые тоже не хочу никакой помощи ценится.

+1

Regex будет '^ [A-z] +' Я не знаю, что это работает с C#. – luastoned

ответ

3

Использование Enumerable.TakeWhile:

var leadingLetters = 
    new String(fileName.Name.TakeWhile(Char.IsLetter).ToArray()); 

TakeWhile делает именно то, что это звучит как: он берет из последовательности, пока условие истинно. В этом случае вы хотите взять из последовательности символов, в то время как символы являются буквами, и остановитесь, как только вы достигнете буквы, отличной от буквы.

Кроме того, я рекомендую переименовать вашу переменную от onlyLetters до leadingLetters. onlyLetters довольно вводит в заблуждение, учитывая ваше простое английское описание.

1

Походит:

string original = "slkj20111104-BATCH2244_20111113-091347.txt"; 
string stripped = Regex.Match(original,"^[a-z]+", RegexOptions.IgnoreCase).Value; 
+0

Умм, разве это не соответствует тому, что требуется? – fge

+0

@fge Я действительно изначально неправильно читал бит, чтобы сохранить vs отбросить, но это было исправлено несколько минут назад; p –

+0

Спасибо, Марк признателен за вашу помощь, он отлично работает, но я выбрал ответ Джейсона Меккли из-за быстрого ответа. – aspmvcdeveloper

0

Заменить [^a-z].* на пустую строку.

+0

не существует '.replace' на .NET/C#' string' –

+0

Извините, я не видел, что это был C# поначалу ... – fge

0
Regex r = new Regex("^[A-z]+"); 
var onlyLetters = r.Match(name); 
+0

это не будет получать только ведущие буквы, он также получит незнатные символы. попробуйте с этой строкой original2 = "mmm_sales_12121212.txt"; – aspmvcdeveloper

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