【问题标题】:Trim leading n alpha characters from string从字符串中修剪前导 n 个字母字符
【发布时间】:2009-06-16 13:35:46
【问题描述】:

我需要修剪字符串的前 n 个字母字符。

例子:

a123456 -> 123456
abc123456 -> 123456
abc123456def -> 123456def

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    试试这样的:

    String output = Regex.Replace(input, @"^[^\d]+", String.Empty);
    

    下面是正则表达式的工作原理:

    ^[^\d]+

    ^ 将表达式锚定到字符串的开头
    [^\d] 是匹配所有非整数值的字符集
    + 通过使其匹配一次或多次来限定 [^\d]

    所以基本上这个正则表达式匹配字符串中的所有非整数字符,直到找到一个整数字符。

    【讨论】:

      【解决方案2】:
      static string AlphaTrimRight(string value)
      {
          while (!Char.IsNumber(value[0]))
              value = value.Substring(1, value.Length - 1);
          return value;
      }
      

      【讨论】:

      • Substring 是否与原始字符串共享底层 char[]?
      • 可能没有; C# 字符串的实现可能与 Java 字符串完全不同。 Java 字符串有一个内部 char[],可以与 substring() 方法创建的字符串共享。我只是想知道 C# 字符串是否做同样的事情。如果他们不这样做,这种方法看起来效率很低(大量的 char[] 复制)。
      • 显然,C# 字符串不能共享底层数据:stackoverflow.com/questions/1003915/…。因此,我不喜欢你在循环中调用的所有 .Substring。
      • 在C#中,字符串可以作为char[],例如:char a = "asdf"[0];
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      相关资源
      最近更新 更多