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:-)由辅助数组复杂化。请参阅我的答案。