日期:2014-05-18  浏览次数:21069 次

截取字符串到数组的问题
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 ……