【问题标题】:Regex - Get digits after a colon正则表达式 - 获取冒号后的数字
【发布时间】:2021-09-09 19:23:44
【问题描述】:

我有一个正则表达式:

var topPayMatch = Regex.Match(result, @"(?<=Top Pay)(\D*)(\d+(?:\.\d+)?)", RegexOptions.IgnoreCase);

我必须将其转换为我所做的 int

topPayMatch = Convert.ToInt32(topPayMatchString.Groups[2].Value);

那么现在...

Top Pay: 1,000,000 然后它当前抓取第一个数字,即 1。我想要全部 1000000。 如果最高薪水:888,888,那么我想要全部 888888。 我应该在我的正则表达式中添加什么?

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    您可以使用像@"(?&lt;=Top Pay: )([0-9,]+)" 这样简单的东西。请注意,此正则表达式将忽略小数。

    这将匹配Top Pay:之后的所有数字及其逗号,之后您可以将其解析为整数。

    例子:

    Regex rgx = new Regex(@"(?<=Top Pay: )([0-9,]+)");
    string str = "Top Pay: 1,000,000";
    
    Match match = rgx.Match(str);
    if (match.Success)
    {
        string val = match.Value;
        int num = int.Parse(val, System.Globalization.NumberStyles.AllowThousands);
        Console.WriteLine(num);
    }
    
    Console.WriteLine("Ended");
    

    来源:

    【讨论】:

    • 我得到一个输入字符串格式不正确的错误。因为它仍然有一个逗号。你试过你的代码吗?我不需要小数。它应该只是一个 int 类型。
    • 我确实尝试了代码。您可以发布您拥有的完整字符串吗?
    • @Davis 我试过了,效果很好:dotnetfiddle.net/wFH2Hk
    • @Davis ps;检查你的号码是否有效(例如,如果它以逗号开头,你会得到一个“输入字符串不是”..);在某个地方,不知何故,你把垃圾放进去,所以你把垃圾拿出来。您可以满足“前导逗号”的情况,例如,通过将正则表达式调整为 (\d[0-9,]*)
    • @CaiusJard 你是对的 - 已编辑!并感谢您的验证。
    【解决方案2】:

    如果您使用后视,则不需要捕获组,您可以将\D* 移动到后视中。

    要获取这些值,您可以匹配 1+ 个数字,然后是可选的重复 , 和 1+ 个数字。

    请注意,您的示例数据包含逗号且没有点,并且使用 ? 作为量词意味着 0 或 1 次。

    (?<=Top Pay\D*)\d+(?:,\d+)*
    

    模式匹配:

    • (?&lt;=Top Pay\D*) 正向向后看,断言左边是 Top Pay 和可选的非数字
    • \d+ 匹配 1+ 个数字
    • (?:,\d+)* 可选择重复 , 和 1+ 位

    查看.NET regex demoC# demo

    string pattern = @"(?<=Top Pay\D*)\d+(?:,\d+)*";
    string input = @"Top Pay: 1,000,000
    Top Pay: 888,888";
    RegexOptions options = RegexOptions.IgnoreCase;
    
    foreach (Match m in Regex.Matches(input, pattern, options))
    {
        var topPayMatch = int.Parse(m.Value, System.Globalization.NumberStyles.AllowThousands);
        Console.WriteLine(topPayMatch);
    }
    

    输出

    1000000
    888888
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-19
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      • 2014-07-18
      • 2013-05-04
      相关资源
      最近更新 更多