使用C#和Regex我有一个奇怪的情况:
string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645";
MatchCollection collection = Regex.Matches(substr, @"[\d]*");
在我的世界中,上面会给我一个包含6个结果的'collection'结果。勉强我的集合包含12个结果,每秒结果都是{}(空)。
我尝试将其重写为:
string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645";
Regex regex = new Regex(@"[\d]*");
MatchCollection collection = regex.Matches(substr);
但它给了我完全相同的结果。我在这里缺少什么?
我正在使用.Net framework 4.5,C#
答案 0 :(得分:7)
我认为问题是你的*
量词。它匹配零个或多个字符,这意味着空字符串在技术上是匹配的。您需要使用+
量词,如下所示:
string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645";
MatchCollection collection = Regex.Matches(substr, @"\d+");
// or
Regex regex = new Regex(@"\d+");
MatchCollection collection = regex.Matches(substr);
它将确保仅返回具有一个或多个数字的字符串。
注意,我还删除了[]
周围的字符类(\d
),因为这里完全没有必要。
进一步阅读:
答案 1 :(得分:1)
不需要正则表达式:
string[] results = substr.Split(',');