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

本文关键字:Regex 字符 字符串 串并 | 更新日期: 2023-09-27 18:18:38

我不知道如何使用正则表达式,但我的朋友告诉我,这将是我试图实现的最有效的方式。我向很多人求助,但他们给我的代码都没有文档,这一点用都没有。这个项目是让我学习的,我认为这是最好的地方。不管怎样,我试着把所有的东西都放在标签里。

下面是一个示例代码:

<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[] tr1 = new string[]{
One: Text
Two: 140/70
Three: 140/70
}
string[] tr2 = new string[]{
Seven: Text
Eight: 140/84
Twenty: 140/80.3345222473
}

划分基本上是"full style"/"active style"。

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

我很抱歉我不能展示我已经做了什么,因为我真的没有做任何相关的事情。自从我的朋友告诉我Regex是最有效的,我就试着学习Regex模式,但我失败得很惨……叹息。

如果有人能指导我,这将意味着一大堆!

谢谢!

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

如果您使用下面的Regex模式,它将帮助您提取"One:"answers"Text"当然你也可以按你喜欢的方式连接。

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

工作原理:

  1. 首先我们需要找到先决条件,它必须匹配,但我们不希望捕获。在上面,就是<td width=0%>
  2. 其次,我们要捕获"One:",这是由(.+)实现的,这意味着给我任何东西,但至少1个字符。什么时候它知道什么时候停止是我有</td>之后,有更高的优先级匹配的括号。
  3. 然后是一个必须匹配但未捕获的新条件。参考第1点来理解。
  4. 你想要的下一件事是提取"文本"出来,这可以通过([^<]+)实现,这意味着给我任何字符(s),直到它击中左箭头<
  5. 后面跟着一个条件,表示0个或多个字符,直到我们遇到</td>

使用上述方法,您还可以使用类似的方法捕获"Two:"answers"Three:"。

为了帮助您检索140,您需要开始寻找匹配的条件。基于你的HTML,我看到"style=...",他们都在<div class=full。因此,要提取140或70,或123.45,您可以使用:

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

解释:
和前面一样,需要前置条件。然后捕获([0-9.]+),这意味着至少1个数字或点,紧接着是px,必须匹配,以此类推。

有很多方法可以达到你的要求。这些不是你需要的最好的正则表达式模式,但它们已经足够了。

更新:请在正则表达式选项中使用"忽略大小写",因为我看到了大小写的混合