2014-03-25 2 views
0

Я пытаюсь вытащить данные из оценки ESPN коробки, и один из файлов HTML имеет:Как использовать regex в Java, чтобы вытащить это из html?

<td style="text-align:left" nowrap><a href="http://espn.go.com/nba/player/_/id/2754/channing-frye">Channing Frye</a>, PF</td>

, и я заинтересован только в захвате имя (Ченнинг Фрай) и положение (PF)

Прямо сейчас, я использую Pattern.quote(start) + "(.*?)" + Pattern.quote(end), чтобы захватить текст между start и end, но я не знаю, как я должен захватить текст, который начинается с рисунка .../http://espn.go.com/nba/player/_/id/ и затем может содержать (any integer)/anyfirst-anylast"> затем захватить мне нужно имя (Channing Frye), затем </a>, и th en захватить нужную мне позицию (PF) и заканчивается рисунком </td>

Спасибо!

ответ

1

Вы можете использовать этот шаблон:

\\/nba\\/player\\/_\\/.*\\\">(.*)<.+>,\\s(.*)< 

Это будет соответствовать любой ссылке в HTML, который содержит `/ нба/игрок/

String re = "\\/nba\\/player\\/_\\/.*\\">(.*)<.+>,\\s(.*)<"; 
String str = "<td style=\"text-align:left\" nowrap><a href=\"http://espn.go.com/nba/player/_/id/2754/channing-frye\">Channing Frye</a>, PF</td>"; 

Pattern p = Pattern.compile(re, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE); 
Matcher m = p.matcher(str); 

пример: http://regex101.com/r/hA3uV0

1

Используйте это регулярное выражение :

[A-Z\sa-z0-9]+(?=</a>)|\w+(?=</td>) 
1

Репродукция:

  • . используется для любого элемента, + используется для любых 1+ элементов
  • * означает, что о или более элементов
  • \ s используется для пространства

    String str = "<td style=\"text-align:left\" nowrap><a href=\"http://espn.go.com/nba/player/_/id/2754/channing-frye\">Channing Frye</a>, PF</td>"; 
    Pattern pattern = Pattern.compile("<td.+>.*<a.+>(.+)</a>[\\s,]+(.+)</td>"); 
    Matcher matcher = pattern.matcher(str); 
    
    while(matcher.find()){ 
        System.out.println(matcher.group(1)); 
        System.out.println(matcher.group(2)); 
    } 
    
0

Вы можете использовать:..

String lString = "<td style=\"text-align:left\" nowrap><a href=\"http://espn.go.com/nba/player/_/id/2754/channing-frye\">Channing Frye</a>, PF</td>"; 
Pattern lPattern = Pattern.compile("<td.+><a.+id/\\d+/.+\\-.+>(.+)</a>, (.+)</td>"); 
Matcher lMatcher = lPattern.matcher(lString); 
while(lMatcher.find()) { 
    System.out.println(lMatcher.group(1)); 
    System.out.println(lMatcher.group(2)); 
} 

Это даст вам:

Channing Frye 
PF 
Смежные вопросы