2014-08-10 6 views
0
String HTML = some HTML source code that contains String a,b 

String a = "<a class="cit-dark-link" href="http://scholar.google.ca/scholar?oi=bibs&hl=en&cites=6912391300348162186">88</a>" 

String b = "<a class="cit-dark-link" href="http://scholar.google.ca/scholar?oi=bibs&hl=en&cites=18217435431424551679">41</a>" 

String ex = ? 

Pattern patternObject = Pattern.compile(ex); 
Matcher matcherObject = patternObject.matcher(HTML); 

while (matcherObject.find()) { 
     System.out.println("DEBUG: Cite is " + matcherObject.group(1)); 
    } 

Привет, я новичок в JAVA и Regex, и мне интересно, как я могу написать String ex, чтобы он печатал только. (Я надеюсь, что я достаточно ясно)java pattern compile regex

Cite 88

Cite является 41

+3

Используйте правильный HTML-парсер, чтобы сделать это: загружать входную строку, найти '' тег с заданным класса, напечатайте его значение узла. Готово. –

+0

Как вы можете сделать это с помощью парсера HTML? Неразумно. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

ответ

0

Вы можете попробовать это:

Pattern patternObject = Pattern.compile("<a class=\"cit-dark-link(.*?)cites=(\\d)+\">(.*?)</a>"); 
      Matcher matcherObject = patternObject.matcher(HTML); 

      while (matcherObject.find()) { 
        System.out.println("DEBUG: Cite is " + matcherObject.group(3)); 
       } 

Печатается:

DEBUG: Cite is 88 
DEBUG: Cite is 41 
0
String ex = ".*>([1-9]+)<.*"; 

Если вы хотите только цифры, вы можете игнорировать все остальное. Я не знаю, как вы применяете URL-адрес к HTML, но этот тест предназначен для одного URL-адреса с пользовательского ввода.

public static void main(String[] args) throws IOException { 
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
    String HTML = in.readLine(); 
    URL a = new URL (HTML); 

    String ex = ".*>([1-9]+)<.*"; 

    Pattern patternObject = Pattern.compile(ex); 
    Matcher matcherObject = patternObject.matcher(a.toString()); 

    while (matcherObject.find()) { 
      System.out.println("DEBUG: Cite is " + matcherObject.group(1)); 
     } 
} 
+0

Как игнорировать 6912391300348162186? Потому что может быть другая строка с разными цифрами. – user116064

+0

. *> Должен игнорировать все до группы сразу после>, я обновляю свой ответ с помощью тестового кода. – MeowMeow