Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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# 如何将Regex.Matches放入数组中?_C#_Arrays_Regex - Fatal编程技术网

C# 如何将Regex.Matches放入数组中?

C# 如何将Regex.Matches放入数组中?,c#,arrays,regex,C#,Arrays,Regex,我有多个正则表达式匹配项。如何将它们放入一个数组中并分别调用它们,例如ID[0]ID[1] string value = ("{\"ID\":\"([A-Za-z0-9_., ]+)\","); string ID = Regex.Matches(textt, @value);` 您已经可以这样做了,因为有一个允许您通过索引访问匹配项的。这是完全正确的: MatchCollection matches = Regex.Matches(textt, @value); Match firstMat

我有多个正则表达式匹配项。如何将它们放入一个数组中并分别调用它们,例如
ID[0]ID[1]

string value = ("{\"ID\":\"([A-Za-z0-9_., ]+)\",");
string ID = Regex.Matches(textt, @value);`

您已经可以这样做了,因为有一个允许您通过索引访问匹配项的。这是完全正确的:

MatchCollection matches = Regex.Matches(textt, @value);
Match firstMatch = matches[0];
但是,如果确实要将匹配项放入数组,可以执行以下操作:

Match[] matches = Regex.Matches(textt, @value)
                       .Cast<Match>()
                       .ToArray();
Match[]matches=Regex.matches(textt,@value)
.Cast()
.ToArray();
另一种方法

  string value = ("{\"ID\":\"([A-Za-z0-9_., ]+)\",");
  MatchCollection match = Regex.Matches(textt, @value);

  string[] ID = new string[match.Count];
  for (int i = 0; i < match.Length; i++)
  {
    ID[i] = match[i].Groups[1].Value; // (Index 1 is the first group)
  }
string value=(“{\'ID\”:\”([A-Za-z0-9\,]+)\”,”);
MatchCollection match=Regex.Matches(textt,@value);
string[]ID=新字符串[match.Count];
for(int i=0;i
或者最后两个的组合可能更容易接受…MatchCollection可以像数组一样直接使用-无需辅助数组:

string value = ("{\"ID\":\"([A-Za-z0-9_., ]+)\",");
MatchCollection matches = Regex.Matches(textt, @value);
for (int i = 0; i < matches.Count; i++)
{
    Response.Write(matches[i].ToString());
}
string value=(“{\'ID\”:\”([A-Za-z0-9\,]+)\”,”);
MatchCollection matches=Regex.matches(textt,@value);
for(int i=0;i
除了返回非强类型的
MatchCollection
之外,.NET中的
Regex.Matches()
方法还有一个问题。也就是说,尽管有一个重载允许您在输入字符串中指定起始索引,但无法限制字符计数

下面的扩展方法解决了这两个问题。它也比
Matches()
MatchCollection
.NET配对简单得多,因为它消除了
MatchCollection
影响的惰性计算行为,而不是一次返回完整的匹配集

public static Match[] Matches(this Regex rx, String s, int ix, int c)
{
    if ((ix | c) < 0 || ix + c > s.Length)
        throw new ArgumentException();

    int i = 0;
    var rg = Array.Empty<Match>();
    Match m;
    while (c > 0 && (m = rx.Match(s, ix, c)).Success)
    {
        if (i == rg.Length)
            Array.Resize(ref rg, (i | 1) << 1);

        rg[i++] = m;
        c += ix - (ix = m.Index + m.Length);
    }
    if (i < rg.Length)
        Array.Resize(ref rg, i);
    return rg;
}
public static Match[]匹配(此正则表达式rx,字符串s,int ix,int c)
{
如果((ix | c)<0 | ix+c>s.长度)
抛出新ArgumentException();
int i=0;
var rg=Array.Empty();
匹配m;
而(c>0&(m=rx.Match(s,ix,c))。成功)
{
如果(i==rg.Length)

Array.Resize(ref rg,(i | 1)上一次我听到
Matches()
返回了一个集合,而不是字符串。你能为上面的第二个代码段发布vb等价物吗?@Smith Try:Dim Matches()As Match=Regex.Matches(textt,@value).Cast(Of Match)(.ToArray()我正在使用.NET2.0,不支持该强制转换there@ani为什么我在4.5中没有强制转换选项?@EliEkstein您需要导入使用系统。Linq:-)由辅助数组复杂化。请参阅我的答案。