2015-10-20 53 views
0

我不知道如何使用正則表達式,但我的朋友告訴我,這將是我想要實現的最有效的方法。我曾經要求多個人提供幫助,但他們給我的所有代碼都是無證的,這根本沒有幫助。這個項目是爲我學習 - 我認爲這將是最好的地方。無論如何 - 我試圖將標籤內的所有內容分組。解析字符串並將它們與正則表達式分組?

下面是一個例子代碼:

<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 
} 

該部門基本上是「全部風格」/「主動風格」。

這可能使用正則表達式或任何其他方式?

對不起,我不能顯示我已經做了什麼,因爲我真的沒有做任何相關的事情..我試圖學習正則表達式模式,因爲我的朋友告訴我正則表達式是最高效率,但我失敗了,很悲慘......嘆了口氣。

這將意味着一大堆,如果有人可以指導我通過這個!

謝謝!

回答

0

如果您使用以下正則表達式模式,它將幫助您提取 「One:」和「Text」,當然,您可以按照自己喜歡的方式連接。

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

工作原理:

  1. 首先,我們需要找到先決條件,必須比賽,但我們不希望捕獲。在上面,那是<td width=0%>
  2. 其次,我們希望捕獲由(.+)實現的「One:」,這意味着給我什麼,但至少有1個字符。它什麼時候知道何時停止是我有</td>,之後有更高的匹配方括號優先級。
  3. 然後是一個必須匹配但未捕獲的新條件。請參閱第1點以瞭解這個想法。
  4. 接下來你想要的是提取出「文字」,這可以通過([^<]+)實現,這意味着給我任何角色直到它碰到左箭頭<
  5. 接下來是條件,說0或更多的字符,直到我們遇到</td>

通過以上所述,您還可以使用類似的方法來捕捉「Two:」和「Three:」。

爲了幫助您檢索140,您需要開始尋找相匹配的條件。根據您的HTML,我看到「style=...」,它們都在<div class=full之內。 因此,要提取140或70,或123。45,你可以使用:

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

說明:
和以前一樣,你需要的先決條件。捕獲然後是([0-9.]+),這意味着至少1個數字或點,緊接着是px,其必須匹配等等。

有很多方法可以實現您的要求。 這些不是您需要的最佳正則表達式模式,但它們就足夠了。

更新:請在正則表達式選項中使用「忽略大小寫」,因爲我看到了大小寫混合。