正则表达式只匹配整数

时间:2016-03-10 09:44:10

标签: c# regex

正如标题所说,我正在尝试构建一个正则表达式来从字符串中提取整数。实际情况是,我有一个非常大的代码文件(整数)和一些值(小数)。

我可以使用[\d]*([.,][\d]*)成功提取小数。 (这可能看起来很奇怪,但我也在捕捉.1或1.)。但是我无法提取整数,直到现在我有[\d]*([\d]*)[\d]之类的东西。我也试过像^[\d]+$这样的东西,但没有运气。

我将在C#应用程序中使用此正则表达式,因此我不知道是否有任何其他规则'应用

Regex ex = new Regex(@"MY_REGEX", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);

这可能是重复的,但我无法理解。

拥有

0066 435sxxzx 23454 2 3 45 06 11.3243 sds435 adc234wer

我只想匹配

0066 23454 2 3 45 06

以下是regex101

中的示例

3 个答案:

答案 0 :(得分:2)

确保两端没有小数分隔符,并带有外观:

\b(?<!\.)\d+(?!\.)\b

请参阅regex demo

C#(您似乎不需要忽略大小写标记为.且数字没有大小写变体):

var ex = new Regex(@"\b(?<!\.)\d+(?!\.)\b", RegexOptions.CultureInvariant);

正则表达式分解:

  • \b - 单词边界(我们要求数字前的字符为非单词字符或字符串的开头
  • (?<!\.) - 此字符不能为点
  • \d+ - 匹配1+位数...
  • (?!\.) - 仅在未遵循.
  • 的情况下
  • \b - 但必须有非单词字符或字符串结尾。

enter image description here

答案 1 :(得分:2)

这对于评论来说太长了,但只是一个建议:如果目标是获取整数值而不是文本,则可以在每个'word'而不是regex上使用int.TryParse。以linq格式:

string input = "0066 435sxxzx 23454 2 3 45 06 11.3243 sds435 adc234wer";

var ints = input.Split(' ')
    .Select(s=> {int i; if(int.TryParse(s,out i))return i; else return (int?)null;})
    .Where(i=>i.HasValue)
    .ToList();

答案 2 :(得分:1)

用空格分割字符串。

例如在java中:

String parts[] = text.split(" ");

如果它是带有正则表达式的数字或者将其解析为数字,那么你可以检查每个单词。