正则表达式使用字符串C#中的数字匹配多个出现次数

时间:2016-10-12 09:28:35

标签: c# regex match

我一直在寻找我的问题答案,但无法找到,所以我写在这里。

我想以字符串为例:=" 37513220102304920105590"

找到所有匹配的长度为11的数字,从3或4开始。

我一直在尝试这样做:

string input = "37513220102304920105590"
var regex = new Regex("^[3-4][0-9]{10}$");
var matches = regex.Matches(trxPurpose);

// I expect it to have 3 occurances "37513220102", "32201023049" and "30492010559"
// But my matches are empty. 
foreach (Match match in matches)
{
    var number = match.Value;

    // do stuff
}

我的问题是:我的正则表达式是坏的还是我做错了什么?

1 个答案:

答案 0 :(得分:3)

在正面前瞻中使用捕捉,你也需要移除锚点。请注意-3之间的4是多余的。

(?=([34][0-9]{10}))

请参阅regex demo

在C#中,由于值已捕获,您需要收集.Groups[1].Value内容,请参阅C# code

var s = "37513220102304920105590";
var result = Regex.Matches(s, @"(?=([34][0-9]{10}))")
        .Cast<Match>()
        .Select(m => m.Groups[1].Value)
        .ToList();