读书人

截取字符串到数组的有关问题

发布时间: 2012-03-11 18:15:39 作者: rapoo

截取字符串到数组的问题
str="[aaaa]11[bbbbb]
.....
[aaaa]12[bbbbb]
......
..
[aaaa]13[bbbbb]
....."

我想把 11 12 13提取出来放在数组里,我这样写怎么不对?

public string[] GetJieQuAll(string start, string end, string html)
{
Regex regstr = new Regex(start + @"([\s\S]*?)" + end);
MatchCollection mc = regstr.Matches(html);
if (mc.Count > 0)
{
string[] strstring = new string[mc.Count];
int i = 0;
foreach (Match m in mc)
{
strstring[i] = m.Value;
++i;
}
return strstring;
}
return null;
}


arrstr=GetJieQuAll("[aaaa]","[bbbbb]",str); //得到null了


这个GetJieQuAll有那里写不对吗?

[解决办法]

C# code
void Main(){string str=@"[aaaa]11[bbbbb].....[aaaa]12[bbbbb]........[aaaa]13[bbbbb].....";    var arrstr=GetJieQuAll("[aaaa]","[bbbbb]",str); //得到null了    Console.WriteLine(arrstr);}public string[] GetJieQuAll(string start, string end, string html)  {  Regex regstr = new Regex(Regex.Escape(start) + @"([\s\S]*?)" + Regex.Escape(end));  MatchCollection mc = regstr.Matches(html);  if (mc.Count > 0)  {  string[] strstring = new string[mc.Count];  int i = 0;   foreach (Match m in mc)  {  strstring[i] = m.Groups[1].Value;  i++;  }  return strstring;  }  return null;  }
[解决办法]
public static string[] GetJieQuAll(string start, string end, string html)
{
Regex regstr = new Regex(Regex.Escape(start) + @"([\s\S])*?" + Regex.Escape(end));
MatchCollection mc = regstr.Matches(html);
if (mc.Count > 0)
{
string[] strstring = new string[mc.Count];
int i = 0;
foreach (Match m in mc)
{
string s = Regex.Replace(m.Groups[0].ToString(), Regex.Escape(start).ToString(), "");
s = Regex.Replace(s, Regex.Escape(end).ToString(), "");
strstring[i] = s;
++i;
}
return strstring;
}
return null;
}
[解决办法]
探讨

你的问题有以下几点:
1. [ ]这在正则表示范围,你要匹配它们,就要转义先: \[ \]
2. 你使用了捕获组,但是最后取结果时,却没有用他们,应该是: strstring[i] = m.Groups[1].Value;
最后如果你用的是.NET3.0+以上的版本,代码还可以这样来写:

C# code

public string[] GetJieQuAll(string ……

读书人网 >C#

热点推荐