正则表达式 - 获取冒号后的数字
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】:您可以使用像@"(?<=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+)*
模式匹配:
(?<=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
【讨论】:
以上是关于正则表达式 - 获取冒号后的数字的主要内容,如果未能解决你的问题,请参考以下文章