вырезать из строки только левые большинство букв, только левые боковые буквы - PullRequest
2 голосов
/ 20 декабря 2011

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

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

Я попробовал это, но он также даст мне ".txt" и "batch", и я не хочу, чтобы какая-либо помощь приветствовалась.

Ответы [ 5 ]

7 голосов
/ 20 декабря 2011

Попробуйте .TakeWhile () вместо .Where () .

var onlyLetters = new String(fileName.Name.TakeWhile(Char.IsLetter).ToArray());
3 голосов
/ 20 декабря 2011

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

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

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

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

1 голос
/ 20 декабря 2011

Звучит как:

string original = "slkj20111104-BATCH2244_20111113-091347.txt";
string stripped = Regex.Match(original,"^[a-z]+", RegexOptions.IgnoreCase).Value;
0 голосов
/ 20 декабря 2011
Regex r = new Regex("^[A-z]+");
var onlyLetters = r.Match(name);
0 голосов
/ 20 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...