Получение текста из тега HTML с помощью регулярных выражений - PullRequest
2 голосов
/ 23 августа 2011

Я пытаюсь прочитать что-то из тегов HTML, и я совершенно глуп, когда дело доходит до регулярных выражений (хотя у меня есть несколько шаблонов, но ни один из них не работает).

I 'Я читаю веб-страницу, просматривая эту строку: <td title='Visit Page for Demilict'><a href='personal.php?name=Demilict&amp;c=s' class='idk' rel='Demilict' style='color: teal;'>Demilict</a></td>

Мне нужно извлечь из нее 'Demilict', и есть 3 возможности сделать это, как вы можете видеть.

Что будетлучшая позиция для его извлечения и как мне этого добиться?

Я также использую это, чтобы найти имена, так как мне нужно извлечь около 60 различных имен, и онивсе используют один и тот же формат, за исключением того, что имя может содержать только буквы, цифры и подчеркивания.

public void parse(String list) {
    try {
        URL url = new URL(list);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(url.openStream()));
        String line;
        StringBuilder stringBuilder = new StringBuilder();
        while ((line = bufferedReader.readLine()) != null) {
            stringBuilder.append(line).append("\n");
        }
        System.out.println(stringBuilder.toString());
        Matcher matcher = namePattern.matcher(stringBuilder.toString());
        if (matcher.find()) {
            System.out.println("matched: " + matcher.group());
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Ответы [ 3 ]

1 голос
/ 23 августа 2011

Если вы действительно используете Regular Expression для извлечения имени, это регулярное выражение должно хранить имя в группе 1:

<td[^>]*?><a[^>]*?>(\\w+)</a></td>
1 голос
/ 23 августа 2011

<a.*?>(\w+)</a> возьмет текст между <a ...> и < /a> и поместит его в первую группу; но, как говорили другие, регулярное выражение здесь, вероятно, не лучший вариант.

Редактировать: сначала меняется + на *, так как 0 символов действительны. тоже убрал второй? согласно комментарию ниже.

0 голосов
/ 23 августа 2011

Вот один из способов получения текста в атрибуте rel = 'XXX'.

String val = "<td title='Visit Page for Demilict'><a href='personal.php?name=Demilict&amp;c=s' class='idk' rel='Demilict' style='color: teal;'>Demilict</a></td>";
String newVal = val.replaceFirst("^.*rel='([a-zA-Z0-9_]+)'.*$", "$1");
System.out.println("Result: " + newVal);

По сути, он просто ищет rel = 'XXX' и выбрасывает все, кроме XXX. Это позволяет для rel содержать символы a-z и A-Z, 0-9 и подчеркивание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...