2011-12-20 7 views
2

"dslkj2011110-BATCH2244_20111113-091347.txt" 私は "dslkj"だけを必要とします。数字または.txt、どうすればよいですか?文字列からほとんどの文字だけを取り除き、左側の文字だけを切り捨てます

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

私はこれを試してみましたが、それはどの私は任意のヘルプは高く評価されたくないあまりにも「.TXT」と 『バッチ』私を与えるだろう。

+1

正規表現は '^ [A-z] +'ですが、C#で動作するかどうかわかりません。 – luastoned

答えて

7

.Where()の代わりに.TakeWhile()を試してください。

var onlyLetters = new String(fileName.Name.TakeWhile(Char.IsLetter).ToArray()); 
+0

ありがとうございました – aspmvcdeveloper

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

ありがとうマークはあなたの助けに感謝しているが、私はJason Meckleyの答えを迅速な返答のために選んだ。 – aspmvcdeveloper

0

空の文字列で[^a-z].*を交換してください。

+0

.NET/C# 'string'に' .replace'がありません –

+0

申し訳ありませんが、私は最初にC#であるとは思わなかった... – fge

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

これは先頭の文字だけではなく、非数字文字も取得します。この文字列で試してください。original2 = "mmm_sales_12121212.txt"; – aspmvcdeveloper

関連する問題