2016-12-03 16 views
0

3つの正規表現パターンを1つの式に結合するにはどうすればよいですか?
は、私が最初に番目のタグ値最初TDタグし、このための適切な正規表現を使用してタグからIDを取得したいです。私はそれらを1つの式ですべて得るために1時間苦労してきました。解決策は何ですか?複数の正規表現グループと先読みを組み合わせる

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

私はこのスニペットのような項目のリストを持っています。あなたは.マッチ改行を作るために(?s)修飾子を必要とする

(?s)th[^>]+l">(.*?)<\/th>.*?<td>(.*?)<\/td>.*?<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/extract-data/selector-syntax - 誰かがhtmlテーブルにコメントを追加するとあなたの正規表現がうまくいきません例えば、 – zapl

+0

おかげで、私は間違いなくそれをチェックします! – SzabK

+0

@zapl htmlが正しく書かれていないと、パーサが壊れています。たとえば、閉じられていないpタグなどです。パーサーはここでは最適なソリューションかもしれませんが、常に最適なソリューションではありません。 –

答えて

0

はここで可能なソリューションです。 3つの希望する文字列はグループ1,2および3にあります。

この場合、先読みは必要ありません。

action

でそれを参照してください。

この正規表現は、例えば、多くの奇妙な場合のために失敗します。 idまたは値にthまたはthを含む\"をエスケープしました。 htmlが有効であることがわかっている場合は、より複雑なクエリにJava HTML parserを使用できます。このパーサーは、htmlが有効でない場合、またはhtml構造が変更された場合にも失敗する可能性があります。

+0

ありがとうございました! – SzabK

+1

downvoteのコメントはありますか?質問はRegexに質問し、私はRegexを与えました。ファイル形式のばらつきに応じて、正規表現は良いアイデアかもしれません。パーサーは良いアイデアかもしれません。 –

関連する問題