使用分隔符多次匹配模式

时间:2017-03-27 11:32:30

标签: c# regex

为了使代码更清晰,我希望多次将我的partern与;作为分隔符的字符串匹配。
现在,我这样分开;

string[] argD = _input.Split(';');

所以实际的正则表达式工作正常。但我想知道我是否可以消除Split

输入:

1d2;1d6

1d2

Patern:/ gmi

这种模式让我匹配1d2

^(\d+)d(\d+)?$

现在我正在分裂;,然后我应用正则表达式

预期结果:

[ [ 1 , 2 ] , [  1, 6 ] ]

[ [ 1 , 2 ] ] 

MCVE:C#代码

int cpt = 0;
string uni = "1d2";
string multi = "1d2;1d8";

MatchCollection RegexMatchUni = Regex.Matches(uni, @"^(\d+)d(\d+)?$");
MatchCollection RegexMatchMulti = Regex.Matches(multi, @"^(\d+)d(\d+)?$");

Console.WriteLine("<TEST UNI>");
foreach (Match m in RegexMatchUni){
    cpt++;
    Console.WriteLine("{0}: {1}d{2}"
                        , cpt
                        , m.Groups[1].Value
                        , m.Groups[2].Value);
    var temp = m.Groups[1].Value;
}

Console.WriteLine("\n<TEST MULTI>");
cpt = 0;
foreach (Match m in RegexMatchMulti){
    cpt++;
    Console.WriteLine("{0}: {1}d{2}"
                        , cpt
                        , m.Groups[1].Value
                        , m.Groups[2].Value);
}

1 个答案:

答案 0 :(得分:2)

从多重正则表达式中删除^$字符,它将开始工作。这些字符强制正则表达式仅匹配整个字符串,而不是子字符串。