解析字符串并使用Regex对它们进行分组?

时间:2015-10-20 20:12:31

标签: c# .net regex string

我不知道如何使用正则表达式,但我的朋友告诉我这将是我想要实现的最有效的方法。我已经要求多个人提供帮助,但他们给我的所有代码都没有记录,这根本没有用。这个项目供我学习 - 我认为这将是最好的地方。无论如何 - 我正在尝试将所有内容分组到标签内。

这是一个示例代码:

<tr>
<td width=0%>One:</td><td width=23% class='colour'>Text</a></td>
<td width=0%>Two:</td><td width=23% class='colour'><div class='full' Style='width:140px'><div class='active' style='width:70px'></div></div></td>
<td width=0%>Three:</td><td class="colour"><div class='full' style='width:140px'><div class='active' style='width:70px'></div></div></td>
</tr>
<tr>
<td width=0%>Seven:</td><td class="colour">Text</a></td>
<td width=0%>Eight:</td><td class="colour"><div class='full' style='width:140px'><div class='active' style='width:84px'></div></div></td>
<td width=0%><strong>Twenty</strong>:</td><td width=23% class='colour'><div class='ful' style='width:140px'><div class='active' style='width:80.3345222473px'></div></div> (5.74)</td>
</tr>

我如何解析所有这些,以便它像这样分组? (我正在使用string []作为例子)

string[] tr1 = new string[]{
One: Text
Two: 140/70
Three: 140/70
}

string[] tr2 = new string[]{
Seven: Text
Eight: 140/84
Twenty: 140/80.3345222473
}

这些分歧基本上是“完整风格”/“活跃风格”。

这可能使用正则表达式或任何其他方式吗?

对不起,我无法展示我已经做过的事情,因为我真的没有做任何相关的事情。我已经尝试学习正则表达式模式,因为我的朋友告诉我Regex效率最高但是我失败了......叹了口气。

如果有人可以指导我完成这一步,这意味着一大堆!

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您使用以下正则表达式模式,它将帮助您提取 &#34;一:&#34;和&#34;文字&#34;当然,你可以按自己喜欢的方式连接。

<td width=0%>(.+)</td><td[^>]+>([^<]+).*</td>

工作原理:

  1. 首先我们需要找到必须匹配的前提条件,但我们不想捕获。在上面,那是<td width=0%>
  2. 其次,我们希望捕获&#34; One:&#34;这是由(.+)实现的,这意味着给我任何至少1个字符。什么时候知道什么时候停止是我</td>之后有更高的优先级匹配括号。
  3. 然后是一个必须匹配但未被捕获的新条件。请参阅第1点以获得想法。
  4. 你想要的下一件事是提取&#34; Text&#34;可以通过([^<]+)来实现,这意味着在它碰到左箭头<之前给我任何角色。
  5. 在我们遇到</td>之前,会出现0个或更多字符的条件。
  6. 通过上述内容,您还可以使用类似的方式捕获&#34;二:&#34;和&#34;三:&#34;。

    为了帮助您检索140,您需要开始寻找匹配的条件。根据您的HTML,我看到&#34; style=...&#34;它们都在<div class=full之内。 因此,要提取140或70或123.45,您可以使用:

    <div class='full' style='width:([0-9.]+)px[^>]+>
    

    说明:
    和以前一样,你需要先决条件。然后捕获为([0-9.]+),这意味着至少有一个数字或点,紧接着是px,必须匹配,依此类推。

    有很多方法可以达到您的要求。 这些并不是满足您需求的最佳正则表达模式,但它们就足够了。

    更新:请使用&#34;忽略大小写&#34;在正则表达式选项中,因为我看到了混合了大小写的情况。