2016-12-03 53 views
0

如何將3個正則表達式組合成1個表達式 - 如果可能的話?
我想要得到的第一個標籤值第一TD標籤並使用該適當的正則表達式的ID一個標籤。我一直在努力爭取一個小時才能將它們全部表達出來。解決方案是什麼?結合多個正則表達式組與前瞻

regex for th tag: 
th[^>]+l">([^<]+)</th 
regex for td tag: 
td>([^<]+)</td 
regex for a tag: 
<a((?!</a).)id="([^"]+)" 

我有一個像這樣的代碼片段的項目列表。

... 
    <th scope="col">1X2</th> 
    <th scope="col" class="goR">Odds</th> 
    </tr></thead> 
    <tbody> 
    <tr class="row1"> 
    <td>Fortuna Köln</td> 
    <td class="prc "><label><a id="MarketGroupListComponent25-selection-38225206.1" /> 
    ... 
+3

怎麼樣正確的HTML解析庫,它爲您提供了更簡單的方式提取可能性,例如:https://jsoup.org/cookbook/extracting-data/selector-syntax - 如果有人添加評論到HTML Table的正則表達式擰例如 – zapl

+0

感謝您的建議,我一定會檢查出來! – SzabK

+0

@zapl如果html沒有正確寫入,例如使用非關閉的p標記,則解析器被擰緊。解析器可能是這裏最好的解決方案,但並不總是最好的解決方案。 –

回答

0

這裏是一個可能的解決方案:

(?s)th[^>]+l">(.*?)<\/th>.*?<td>(.*?)<\/td>.*?<a id="(.*?)" 

您需要(?s)修改,使.匹配一個換行符。 3個所需的字符串組1,2和3

你不需要在這種情況下,任何預計。

看到它在action

注:

這個表達式將許多怪異的情況下出現故障,例如在標識或值中包含thth,其中包含\"。 如果您知道該html有效,則可以使用Java HTML parser進行更復雜的查詢。如果html無效或html結構已更改,則此解析器也可能失敗。

+0

謝謝,它的工作! – SzabK

+1

針對downvote的任何評論?問了一個正則表達式,我給了一個正則表達式。根據文件格式的可變性,正則表達式可能是一個好主意,解析器可能是一個更好的主意。 –