繁体   English   中英

正则表达式仅匹配整数

[英]Regex to Match only integer

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

我可以使用[\\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中的示例

确保两端没有小数点分隔符并带有环顾四周:

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

正则表达式演示

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

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

正则表达式细分:

  • \\b单词边界(我们要求数字前的字符为非单词char或字符串的开头
  • (?<!\\.) -此字符不能为点
  • \\d+ -匹配1个以上的数字...
  • (?!\\.) -仅当不带.
  • \\b但必须有一个非单词char或字符串的结尾。

在此处输入图片说明

对于评论来说,这太长了,但仅是一个建议:如果目标是获取整数值本身而不是文本,则可以对每个“单词”使用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();

用空格分隔字符串。

例如在Java中:

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

然后,您可以使用正则表达式或将其解析为数字来检查每个单词是否为数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM