2016-12-30 1 views
-2

長年にわたり特別正規表現の使い方を理解しようとした結果、私は初心者であれば何の助けもなしにこれを解決することができないことに気付きました正規表現で。私の仕事は、正規表現を作成して、HTMLソースコードから度のある名前を抽出することです。名前の後ろにすべての次数を持つ特定の正規表現名

ウェブサイトはhttp://bacula.nti.tul.cz/~jan.hybs/ada/です。ここでは明らかにソースコードを見つけることができます。私は正規分布を作成する必要があります。出力は次のようになるはずです - prof。 Ing。 Josef Novak、Ph.D.など - 単に「Propojeni」と呼ばれる列のすべてを抽出する必要があります。

私にとっては順序が重要です。 (私はそれをArrayリストに入れています)

"propojeni"に表示されているパターンのすべてではなく、どのような種類のパターンでも正規表現を書くことができます。

本当にありがとうございました。

+0

あなたは既に書いたことと、この問題をどのように解決できないのかを示すことができますか? –

+0

必須リンク:http://stackoverflow.com/a/1732454 regexの代わりにHTMLパーサーを使用してください。 Jsoupはかなりいいですし、CSSセレクタをサポートしています。 – Pshemo

+0

(Ing | doc | prof)\。\ s [AZ]([az] + | \\ s [az] +)単純に私は連鎖度を最初と終わり。 – Rickertbrandsen

答えて

0

Proper solution shouldn't involve regex but XML/HTML parserjsoupのように。その兄弟のインデックス(0から数えて)1に等しい

Document doc = Jsoup.connect("http://bacula.nti.tul.cz/~jan.hybs/ada/").get(); 
Elements personel = doc.select("tr td:eq(1)"); 
for (Element person : personel){ 
    System.out.println(person.text()); 
} 

select("tr td:eq(1)")すべてtr要素を見つけようとし、その内部td:あなたのコードは次のようになります。このツールを使用すると

。したがって、1つのtrが3つのtdの要素を持つ場合、中間の要素は1でインデックスされ、それが後になるものです。

Element#text()戻り<td><a link="foo"> bar </a></td>ブラウザでbarように印刷されるような要素は、(リンクの装飾と)、表現し、それはtext()が返すものであり、選択されたテキストを。


しかし、(誰かがあなたやあなたの家族を脅かしているので)あなたが本当にアイデアの1その後、正規表現を使用する必要がある場合は、コンテンツそのものに焦点を当てることではなく、文脈上のコンテンツがあるだろうことを保証します。あなたの場合は、<a href="/zamestnanec/SOME_NUMBER">CONTENT</a>を探してCONTENTを選択するようです。

だからあなたの正規表現は

String regex = "<a href=\"/zamestnanec/\\d+\">(.*?)</a>"; 

のように見えることができ、あなたが行う必要がありますすべてが(グループ1である)(.*?)のエキス内容です。

だからあなたのコードは(.*?)

String regex = "<a href=\"/zamestnanec/\\d+\">(.*?)</a>"; 
Pattern p = Pattern.compile(regex); 
Matcher m = p.matcher(yourHtml); 
while(m.find()){ 
    System.out.println(m.group(1)); 
} 

?*reluctant作るようなものを見ることができるので、最小限の可能な一致を見つけようとします。このコードは、デフォルトで.以来、その?のない最も可能性の高い作業が行区切りにマッチすることができないだろうが、あなたのHTMLが

<a href="..">foo</a><a href="bar">bar</a> 

のようになりますならば、正規表現​​ため(.*)

<a href="..">foo</a><a href="bar">bar</a> 
      ^^^^^^^^^^^^^^^^^^^^^^^^ 

を表す代わりのでしょう

<a href="..">foo</a><a href="bar">bar</a> 
      ^^^ 
関連する問題