2015-06-22 3 views
3

Сначала позвольте мне рассказать вам, откуда я. У меня есть строка, которая является html-кодом с веб-сайта, я получил это с помощью JSOUP. В любом случае, так что html все в строке, и я могу напечатать его в текстовом файле. Так что я пытаюсь получить песни внутри этого кода, и каждая песня один и той же «метка»Как использовать шаблон для получения значения между двумя известными строками

это строка из текстового файла я напечатанной его

  <div class="title" itemprop="name"> 
      Wrath 
      </div> </td> 

В блокноте это выглядит как строка, но при копировании и вставке она выглядит так. Так что я хочу, это гнев в середине, так что я пытался сделать шаблон, чтобы найти его, используя помощь от этого другого поста стека: Java regex to extract text between tags

Это часть моего кода, который должен с этим делать

Pattern p = Pattern.compile("<div class=\"title\" itemprop=\"name\">(.+?)</div> </td>"); 
    Matcher m = p.matcher(html); 
    while(m.find()) { 
     quote.add(m.group(1)); 
    } 

Когда он запускается, он показывает, что в цитате ArrayList ничего нет. Возможно, это не работает, потому что он подсчитывает промежуток между ними. Есть идеи?

+0

Попробуйте использовать [XPath вместо этого.] (Http://docs.oracle.com/javase/7/docs/api/javax/xml/ xpath/package-summary.html) – jreut

ответ

4

Вы можете использовать jsoup для разбора, а также загрузить HTML документ:

String site = "http://example.com/"; 
Document doc = Jsoup.connect(site).get(); 
String text doc.select("div.title").first().text(); 

Или просто использовать XPath, если это не сработает. Регулярные выражения отлично подходят для сбора данных из неструктурированного текста. Однако, если у вас есть структурированный документ, такой как HTML, вы можете оставить весь тяжелый подъем специально разработанному парсеру. Java поставляется с javax.xml.xpath library, с помощью которого вы можете искать дерево узлов вашего документа.

Допустим, ваш документ выглядит следующим образом:

<html> 
    <body> 
    <div class="title">Wrath</div> 
    </body> 
</html> 

Вы могли бы сделать это, чтобы найти текст в этом DIV:

XPath xpath = XPathFactory.newInstance().newXPath(); 
String expression = "/html/body/div[@class='title']/text()"; 
InputSource inputSource = new InputSource("myDocument.html"); 
NodeList nodes = (NodeList) xpath.evaluate(expression, inputSource, XPathConstants.NODESET); 
+0

Я не могу использовать первую часть, потому что я не знаю, что Гнев уже там, это может быть любое имя. Что касается кода XPath, который вы мне даете, кажется, что я получаю некоторые ошибки, такие как malformedURLexcpetion: нет протокола: а затем он показывает файл после этого – Kasarrah

+2

Предполагаю, что вы где-то загружаете веб-страницу? В этом случае вы можете проанализировать «String», который вы загрузили в JSOUP 'Document', а затем просто используйте' doc.select («div.title»). Text() ', чтобы получить текст. – jreut

+0

Ах !! Это работало по большей части, оно получило все песни и немного лишний материал. Спасибо огромное! – Kasarrah

0

Если он разбирает, как Perl, возможно, придется потесниться на \

Pattern p = Pattern.compile("<div class=\"title\" itemprop=\"name\">(.*?)<\\/div>"); 

Должно быть

Pattern p = Pattern.compile("<div class=\"title\" itemprop=\"name\">(.*?)<\\\\/div>"); 

Но для такого рода вещи, которую Regex является неправильным инструментом

Смежные вопросы