C# 正则表达式将多个事件与字符串C中的数字匹配#
我一直在寻找我的问题答案,但找不到,所以我写在这里 我想以字符串为例:=“37513220102304920105590” 并查找长度为11的数字的所有匹配项,从3或4开始 我一直在努力这样做:C# 正则表达式将多个事件与字符串C中的数字匹配#,c#,regex,match,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 o
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
}
我的问题是:我的正则表达式是坏的还是我在匹配方面做了一些错误的事情?在积极的前瞻中使用捕获,并且你也需要移除锚。注意,
3
和4
之间的-
是冗余的
(?=([34][0-9]{10}))
看
在C#中,由于捕获了值,因此需要收集.Groups[1]。值内容,请参阅:
var s=“37513220102304920105590”;
var result=Regex.Matches(s,@“(?=([34][0-9]{10})))
.Cast()
.Select(m=>m.Groups[1]。值)
.ToList();
您可以编写[34]
和\d
,如果您想缩短正则表达式;)我不知道?=
,不错。是的,[3-4]
=[34]
。对于\d
,我只会在添加RegexOptions.ECMAScript
标志的同时添加它,因为\d
匹配的数字多于ASCII数字。请看。和\d{10}
而不是[0-9]{10}
,那么我不认为您可以将其缩短。在regex中,“更短”并不意味着“更好”。“缩短正则表达式”应该知道自己在做什么。我同意。缩短,不仅仅是关于正则表达式,关于代码也是一样的(而且不仅仅是)。\d
有什么不好的地方吗?
var s = "37513220102304920105590";
var result = Regex.Matches(s, @"(?=([34][0-9]{10}))")
.Cast<Match>()
.Select(m => m.Groups[1].Value)
.ToList();