Java Regex Problem - PullRequest
       1

Java Regex Problem

0 голосов
/ 21 марта 2011

В качестве входного текста у меня большой HTML-файл, из которого я должен извлечь некоторую информацию, используя сопоставление с образцом «Регион» выглядит следующим образом:

 some html text
 <div debugState" style="display: none;">
            Model: ModelCode[BR324]
            Features: [S08TL, S0230, S0851, S0428, S01CD, S0879, S01CA, S08SP, S0698, S01CB, S0548, S08SC, S08TM, S01CC, S0801, S0258, P0668, S04AK]
            Packages: [S0801]
 </div>
        some html text

Я написал следующий код. (На debInfo) - источник HTML для сканирования. Из-за

Pattern model = Pattern.compile(".*(Model: ModelCode\\[\\w\\]).*, Pattern.DOTALL");
Pattern features = Pattern.compile(".*(Features: \\[\\w*\\]).*, Pattern.DOTALL");
Pattern packages = Pattern.compile(".*(Packages: \\[\\w*\\]).*, Pattern.DOTALL");


Matcher m1 = model.matcher(debInfo);
Matcher m2 = features.matcher(debInfo);
Matcher m3 = packages.matcher(debInfo);

boolean a = m1.matches();
boolean b = m2.matches();
boolean c = m3.matches();

System.out.println("matches(); " + a + " " + b + " " + c + " " + "\n" + debInfo);

и у меня нет совпадений :-(. Что я делаю неправильно? Заранее спасибо (большое!)

Ответы [ 4 ]

3 голосов
/ 21 марта 2011

Вы используете \\w в ваших (правильно экранированных) квадратных скобках. Это соответствует только одному символу. Попробуйте вместо \\w+ или \\w*.

Кроме того, вы включили , Pattern.DOTALL в ваш строковый литерал, который я считаю опечаткой:

Pattern model = Pattern.compile(".*(Model: ModelCode\\[\\w+\\]).*", Pattern.DOTALL);

Также обратите внимание, что для списка Features \\w*, разделенных запятыми и пробелами, работать не будет, вам понадобится что-то вроде [\\w\\s,]*.

2 голосов
/ 21 марта 2011

Я думаю, вам нужно использовать:

Pattern model = Pattern.compile(".*(Model: ModelCode\\[\\w*\\]).*", Pattern.DOTALL);
Pattern features = Pattern.compile(".*(Features: \\[\\w*\\]).*", Pattern.DOTALL);
Pattern packages = Pattern.compile(".*(Packages: \\[\\w*\\]).*", Pattern.DOTALL);
1 голос
/ 23 марта 2011

Это правильные шаблоны:

Pattern modelPattern = Pattern.compile(".*Model: ModelCode\\[(\\w*)\\].*",
        Pattern.DOTALL | Pattern.MULTILINE);
Pattern featuresPattern = Pattern.compile(".*Features: \\[([\\w\\s,]*)\\].*",
        Pattern.DOTALL | Pattern.MULTILINE);
Pattern packagesPattern = Pattern.compile(".*Packages: \\[([\\w\\s,]*)\\].*",
        Pattern.DOTALL | Pattern.MULTILINE);
0 голосов
/ 21 марта 2011

Отсутствовал переключатель MULTILINE.

 Pattern modelPattern = Pattern.compile(".*(Model: ModelCode\\[\\w*\\]).*", Pattern.DOTALL | Pattern.MULTILINE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...