正则表达式 - 获取冒号后的数字

Posted

技术标签:

【中文标题】正则表达式 - 获取冒号后的数字【英文标题】: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。 我应该在我的正则表达式中添加什么?

【问题讨论】:

【参考方案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");

来源:

Convert int from string with commas

【讨论】:

我得到一个输入字符串格式不正确的错误。因为它仍然有一个逗号。你试过你的代码吗?我不需要小数。它应该只是一个 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 demo 和C# 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

【讨论】:

以上是关于正则表达式 - 获取冒号后的数字的主要内容,如果未能解决你的问题,请参考以下文章

C# 正则表达式匹配最后一个下划线后的最后一个数字

php 正则表达式 提取字符串内小括号中的数字,只要数字

正则表达式:查找特定字符串后的所有数字

C#正则表达式如何提取一段字符串中汉字后的数字

JS正则表达式之--?:

用于在 C# 中获取字符串中的数值的正则表达式