我一直在寻找我的问题答案,但无法找到,所以我写在这里。
我想以字符串为例:=" 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
}
我的问题是:我的正则表达式是坏的还是我做错了什么?
答案 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();