2011-12-20 77 views
2

我有这样的文件:“dslkj20111104-BATCH2244_20111113-091347.txt” 我只需要“dslkj”而不是其余的数字或数字或.txt,我该如何接受?只去掉字符串中最左边的字母,只有左边的字母

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

我试过,但它会给我“.TXT”和‘批’太,我不希望任何帮助表示赞赏。

+1

正则表达式会是'^ [A-z] +'但我不知道它适用于C#。 – luastoned 2011-12-20 14:59:46

回答

7

尝试.TakeWhile()而不是.Where()

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

谢谢,就像一个魅力工作 – aspmvcdeveloper 2011-12-20 15:17:44

3

使用Enumerable.TakeWhile

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

TakeWhile不正是它听起来像:它从序列需要而条件为真。在这种情况下,您希望在字符是字母时从字符序列中提取字符,并在您到达非字母时立即停止。

此外,我建议将您的变量从onlyLetters重命名为leadingLettersonlyLetters是相当误导给你的纯英文描述。

1

听起来像:

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

恩,这不是完全相反,而是要求什么? – fge 2011-12-20 15:05:49

+0

@fge我的确最初误读了这些位以保持放弃状态,但几分钟前已修复; p – 2011-12-20 15:06:42

+0

感谢Mark非常感谢您的帮助,它完美地工作,但我选择了Jason Meckley的答案,因为我的答复很快。 – aspmvcdeveloper 2011-12-20 15:19:31

0

由空字符串替换[^a-z].*

+0

NET/C#上没有'.replace'字符串 – 2011-12-20 15:06:06

+0

对不起,我没有看到它是C#第一个... – fge 2011-12-20 15:06:57

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

这不会得到只有前导字母它也将得到非数字字符。试试这个字符串original2 =“mmm_sales_12121212.txt”; – aspmvcdeveloper 2011-12-20 15:16:51