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

求一个匹配多条件的正则表达式
数据源如下:
string html="
  <li class="l1 ">221929</li> //A位置
<li class="l4 ">05-24-21:43</li> //B位置
  <li class="l3" ></li> //位置1
  <li class="l3" ></li> //位置2
  <li class="l3" ></li> //位置3
  <li class="l3" ></li> //位置4
  <li class="l3" ></li> //位置5
  <li class="l2" ></li> //位置6
  <li class="l2" ></li> //位置8
  <li class="l2" style="background-color:#FF0000">10</li> //C位置 //位置8
  <li class="l2" ></li> //位置9
  <li class="l2" ></li> //位置10
  <li class="l2" ></li> //位置11
  <li class="l3" ></li> //位置12
  <li class="l3" ></li> //位置13
  <li class="l3" ></li> //位置14
  <li class="l3" ></li> //位置15
  <li class="l3" ></li> //位置16
  <li class="l6 " >AABB</li> //D位置
"

其中,我需要找出的是红色的三个值,并且这三个值是一一对应关系,即每个A值对应一个B值和一个C值,不重复,在C位置处的红字内容有可能出现在位置1-16之间,并不固定,但是A位置和B位置是固定的,每段内容都是从A位置开始,D位置结束,其中开始特征为<li class="l1 ">,这个是固定的,结束位置为<li class="l3" ></li> //位置16
  <li class="l6 " ,这个也是固定的。(其中A位置和B位置的值是固定位数,C位置的值为1-2位数字)

求高手们帮忙给个正则表达式吧,我弄了3天没解决出来

------解决方案--------------------
(?is)<li class="l1 ">(?<A>.*?)</li>.*?<li class="l4 ">(?<B>.*?)</li>.*?<li class="l2" style="background-color:#FF0000">(?<C>.*?)</li>.*?<li class="l6 " >(?<D>.*?)</li>
------解决方案--------------------
try...

C# code
Regex reg = new Regex(@"(?is)<li\s+class=""l1\s*"">([^<]+)</li>[^<]*<[^>]*>([^<]+)</li>(?:[^<]*<li[^>]*>\s*</li>)*[^<]*<li[^>]*>(\d{2})</li>");
MatchCollection mc = reg.Matches(yourStr);
foreach (Match m in mc)
{
    richTextBox2.Text += m.Groups[1].Value + "\n";
    richTextBox2.Text += m.Groups[2].Value + "\n";
    richTextBox2.Text += m.Groups[3].Value + "\n";
}