Сопоставление рисунка внутри скобок с символом% - PullRequest
0 голосов
/ 02 октября 2018

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

Я уверенэто очень просто, и я просто хочу извлечь числа перед символом% здесь:

<td>0 items (0%)</td>

Я попробовал довольно много предложений, но ни одно из них не работает.

linecache = readercache.readLine();
System.out.println(linecache);
Pattern patterncf1 = Pattern.compile("\\((.*?)\\)");
tried
Pattern patterncf1 = Pattern.compile("<td>\\d+ \\w+ \\((\\d+)?%\\)</td>");
tried
Pattern patterncf1 = Pattern.compile("<td>\\((\\d+)?%\\)</td>");
tried
Pattern patterncf1 = Pattern.compile("\\((\\d+)?%\\)");

но всегда получаю

<td>0 items (0%)</td>

Исключение в потоке "Thread-0" java.lang.IllegalStateException: Совпадение не найдено

Я также попробовал приведенное ниже предложение, но все равно выдает ошибку, и я быпредположим, что в данном случае это правильная группа.

linecache = readercache.readLine();
System.out.println(linecache);
String pattern = "\\d+(?=%)";
Pattern patterncf1 = Pattern.compile(pattern) 
Matcher matchercf1 = patterncf1.matcher(linecache);
String passedvalue = matchercf1.group(1);
System.out.println(passedvalue);

Эта часть в другом разделе кода работает нормально.

Pattern patternmb1 = Pattern.compile("<td>(.+?) GB</td>");
Matcher matchermb1 = patternmb1.matcher(line);
if (matchermb1.find()) {
    String passedvalue = matchermb1.group(1);
    String[] tmpStr = passedvalue.split("\\.") ; 
    String withoutDecStr = tmpStr[0]; 
    Float passedvalue2 = Float.valueOf(withoutDecStr);
    System.out.println("MIU: " + passedvalue2);
    JVMinusearray.add(passedvalue2);

Буду признателен, если кто-то может дать какой-то совет, пожалуйста..

Спасибо

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Вы можете использовать следующее:

Pattern pattern = Pattern.compile("<td>.*\\((\\d+)%\\)</td>");
Matcher matcher = pattern.matcher("<td>0 items (2000%)</td>");
if(matcher.matches()) {
    System.out.println(matcher.group(1));
}

Вы получите число, добавленное к %.

0 голосов
/ 02 октября 2018

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

Спасибо за ваше время.Я ценю это.

С уважением,

Пол

0 голосов
/ 02 октября 2018

, если вы хотите извлечь числа до %, следующее будет соответствовать

(\\d+(?=%))

демо

Редактировать:

из вашегоКомментарий, я понял, что проблема заключается в определении правильной группы для выбора.в этом регулярном выражении, что вы хотите в goup 1, вы должны использовать group1, чтобы заставить его работать.

linecache = readercache.readLine();
System.out.println(linecache);
String pattern = "(\\d+(?=%))";  // just include ()
Pattern patterncf1 = Pattern.compile(pattern) 
Matcher matchercf1 = patterncf1.matcher(linecache);
String passedvalue = matchercf1.group(1);
System.out.println(passedvalue);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...