Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式将多个事件与字符串C中的数字匹配#_C#_Regex_Match - Fatal编程技术网

C# 正则表达式将多个事件与字符串C中的数字匹配#

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

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

我想以字符串为例:=“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
}

我的问题是:我的正则表达式是坏的还是我在匹配方面做了一些错误的事情?

在积极的前瞻中使用捕获,并且你也需要移除锚。注意,
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();