【问题标题】:strip out only left most letters from a string, only the left side letters只去掉字符串中最左边的字母,只去掉左边的字母
【发布时间】:2012-01-24 12:37:54
【问题描述】:

我的文件类似于:“dslkj20111104-BATCH2244_20111113-091347.txt” 我只需要“dslkj”而不需要其余的数字或数字或 .txt,我该如何处理?

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

我试过了,但它也会给我“.txt”和“batch”,我不希望有任何帮助。

【问题讨论】:

  • Regex 将是 ^[A-z]+ 我不知道它是否适用于 C#。

标签: c# regex c#-4.0


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    使用Enumerable.TakeWhile:

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

    TakeWhile 就像它听起来的那样:它在条件为真时从序列中获取。在这种情况下,您希望在字符是字母时从字符序列中取出,并在到达非字母时立即停止。

    另外,我建议将变量从 onlyLetters 重命名为 leadingLetters。鉴于您的简单英文描述,onlyLetters 相当具有误导性。

    【讨论】:

      【解决方案3】:

      听起来像:

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

      【讨论】:

      • 嗯,这不是与要求的完全相反吗?
      • @fge 我最初确实误读了要保留与丢弃的位,但几分钟前已修复;p
      • 感谢 Mark 感谢您的帮助,它运行良好,但由于及时回复,我选择了 Jason Meckley 的答案。
      【解决方案4】:

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

      【讨论】:

      • .NET / C# string 上没有 .replace
      【解决方案5】:
      Regex r = new Regex("^[A-z]+");
      var onlyLetters = r.Match(name);
      

      【讨论】:

      • 这不仅会得到前导字母,还会得到非数字字符。试试这个字符串 original2 = "mmm_sales_12121212.txt";
      猜你喜欢
      • 2012-01-24
      • 1970-01-01
      • 2011-08-22
      • 2016-09-23
      • 2017-05-15
      • 2010-12-15
      • 2016-03-09
      • 2015-12-01
      • 2011-05-11
      相关资源
      最近更新 更多