【问题标题】:How do I determine if there are two or one numbers at the start of my string?如何确定字符串开头是否有两个或一个数字?
【发布时间】:2011-04-18 01:33:35
【问题描述】:

如何确定字符串开头的数字(任意位数)?

一些可能的字符串:

1123|http://example.com
2|daas

应该返回 1123 和 2。

【问题讨论】:

    标签: c# parsing html-parsing


    【解决方案1】:

    使用正则表达式:

    using System.Text.RegularExpressions;
    
    str = "35|http:\/\/v10.lscache3.c.youtube.com\/videoplayback...";
    
    Regex r = new Regex(@"^[0-9]{1,2}");
    Match m = r.Match(str);    
    if(m.Success) {
        Console.WriteLine("Matched: " + m.Value);
    } else {
        Console.WriteLine("No match");
    }
    

    将捕获字符串开头的 1-2 位数字。

    【讨论】:

    • 可以使用 \d 代替 [0-9] 并且外部的 () 不是必要的我认为
    • @burkestar 在这种情况下不需要捕获组。马克是对的,它们可以被省略。保留它们并没有什么坏处,但是通过使用m.Value,您实际上并没有引用捕获组。为此,您将使用m.Groups[1].Value。由于此正则表达式从字符串的开头开始,除了数字之外不匹配任何内容,您可以省略 () 并使用 m.Value
    • -1。当它不是最好的方法时滥用正则表达式
    • regex 高效、灵活(如果需要考虑更高级的情况)、易于理解并且从 .NET 1.1 开始就可以使用。 Linq 需要 .NET Framework 3.5。
    • 使用正则表达式仅在众所周知的位置(索引 0)捕获 1 或 2 位数字就像使用大锤杀死蚂蚁
    【解决方案2】:

    您可以使用 LINQ:

    string s = "35|...";
    
    int result = int.Parse(new string(s.TakeWhile(char.IsDigit).ToArray()));
    

    或者(如果数字后面总是跟|)很好的字符串操作:

    string s = "35|...";
    
    int result = int.Parse(s.Substring(0, s.IndexOf('|')));
    

    【讨论】:

    • 如果他想对其他块做点什么,也可以使用split并限制split的数量
    • 解析后如何删除号码?
    • 和TakeWhile的使用一样,我还没用过这个扩展。
    • @Liam:没错。请改用s.Split(new char[] {'|'}, 2)。它返回一个数组,第一个包含您的数字作为字符串,您可以int.Parse,第二个包含字符串的其余部分,其中删除了数字
    【解决方案3】:

    如果您知道该数字始终为 2 位数字:

    string str = "35|http:\/\/v10.lscache3.c.youtube.com\/videoplayback?...";
    int result;
    if (!int.TryParse(str.Substring(0, 2), out result)) {
        int.TryParse(str.Substring(0, 1), out result)
    }
    // use the number
    

    如果您不确定数字有多长,请查看 dtb 的 .indexOf() 方法。如果您需要更复杂的东西,请考虑使用正则表达式。

    【讨论】:

      【解决方案4】:

      您可以获取前两个字符并转换为int。

      var s = "a35|...";
      short result = 0;
      bool isNum = Int16.TryParse(s.Substring(0, 2), out result);
      

      【讨论】:

        猜你喜欢
        • 2022-11-16
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        • 2019-08-21
        • 1970-01-01
        • 1970-01-01
        • 2011-06-13
        • 2011-05-09
        相关资源
        最近更新 更多