正如标题所说,我正在尝试构建一个正则表达式来从字符串中提取整数。实际情况是,我有一个非常大的代码文件(整数)和一些值(小数)。
我可以使用[\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
中的示例答案 0 :(得分:2)
确保两端没有小数分隔符,并带有外观:
\b(?<!\.)\d+(?!\.)\b
请参阅regex demo
C#(您似乎不需要忽略大小写标记为.
且数字没有大小写变体):
var ex = new Regex(@"\b(?<!\.)\d+(?!\.)\b", RegexOptions.CultureInvariant);
正则表达式分解:
\b
- 单词边界(我们要求数字前的字符为非单词字符或字符串的开头(?<!\.)
- 此字符不能为点\d+
- 匹配1+位数... (?!\.)
- 仅在未遵循.
\b
- 但必须有非单词字符或字符串结尾。答案 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(" ");
如果它是带有正则表达式的数字或者将其解析为数字,那么你可以检查每个单词。