2016-12-07 14 views
0

私はJAVAのタグの間にテキストを取得しようとします。私は抽出するために正規表現を使用したい正規表現タグ間でテキストを取得

`

<td colspan="2" style="font-weight:bold;">HELLO TOTO</td> 
<td>Function :</td> 

`

"HELLO TOTO" ではなく "機能:"

私はすでにこの

のようなものを試してみました`

String btwTags = "<td colspan=\"2\" style=\"font-weight:bold;\">HELLO TOTO</td>\n" + "<td>Function :</td>"; 
     Pattern pattern = Pattern.compile("<td(.*?)>(.*?)</td>"); 
     Matcher matcher = pattern.matcher(btwTags); 
     while (matcher.find()) { 
      String group = matcher.group(); 
      System.out.println(group); 
     } 

しかし結果は入力と同じです。 アイデア

は、私もこの正規表現(?<=<td>)(.*?)(?=</td>)を試みたが、それが唯一の難点「機能:」 私は知らないが、彼は事前に

+0

ソースXHTMLですか?もしそうなら、私はXMLパーサとXPATHを使用します。 – Roger

+0

jsoupライブラリを試してください。下記のリンクをご覧ください。 https://jsoup.org/ –

+0

use group(2);タグ内の内容を取得するには – Aelop

答えて

1

ドン」オープンすでに<td ...>

感謝した後に何かすることができることを設定しますあなたは01を使用することができます RegEx match open tags except XHTML self-contained tags

:Tなぜチェックこのリンクを知っている...その非常に悪い考え、HTMLを解析するために

を正規表現を使用しますこれを実現するには

String html; // your html code 
Document doc = Jsoup.parse(html); 
System.out.println(doc.select("td[colspan=2]").text()); 
+1

このリンクもまた正規表現を使うことは必ずしも悪い考えではありません.Jsoupは必ずしも正解とは限りません。 HTMLが壊れている場合(例:閉じていないタグを使用すると、パーサーがチョークする可能性があります。 –

+1

@EricDuminilここでは、HTMLが整形式であると仮定します(それ以外の場合はHTMLではありません)。また、時間を費やして、特定の入力例でボルケンになる完全な正規表現を作成することもできます。 – nafas

+0

ウェブ上のどこかからHTMLをダウンロードする場合、実際にはそれがうまく構成されていないと仮定する必要があります。 –

0

非常に基本的なHTML解析にRegexを使用できます。ここに私が見つけることができる最も簡単なJavaの正規表現があります:

"(?i)<td[^>]+>([^<]+)<\\/td>" 

これは、属性と値で最初のtdタグに一致します。 "HELLO TOTO"はグループ1に属します。

ここにはexampleがあります。

もっと複雑なものについては、Jsoupのようなパーサが良いでしょう。 しかし、HTMLが有効でない場合や、コードを書いた構造が変更された場合でも、パーサーが失敗する可能性があります。

+0

* "あなたがコードを書いた構造が変更されている場合" *パーサーは失敗しませんが、あなたはそうします:)また、 "失敗"は相対的です。例外を投げているのは "失敗"ですか? – m0skit0

+0

@ m0skit0:私は、HTMLが他の誰かによって書かれている可能性があり、HTML構造全体がそれ以上の通知なく変更される可能性があることを意味しました。 –

+0

まだ "parser vs regex"の質問とは何が関係しているのか分かりません。 – m0skit0

-1

私はちょうど.Regexが遅い与えられた部分文字列で区切るとしばしば混同するスプリット機能を使用しています参考になるREGEX・ホープ..

public class Solution{ 
    public static void main(String ...args){ 
    String str = "<td colspan=\"2\" style=\"font-weight:bold;\">HELLO TOTO</td><td>Function :</td>"; 
    String [] garray = str.split(">|</td>"); 
    for(int i = 1;i < garray.length;i+=2){ 
     System.out.println(garray[i]); 
    } 
    } 
} 


Output :: HELLO TOTO    
      Function : 

を使用せずにソリューションを提供していました。

幸せなコーディング...

+0

それではなぜCを使わないのですか? Javaを使用しないでください。速度が遅く、しばしば混乱します。 – m0skit0

+1

['String#split(String regex)'](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-): "指定された**正規表現**の一致のまわりでこの文字列を分割します。 – xehpuk

関連する問題