Regex to Parse Блок текста, аналогичный формату файла свойств Java - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть следующая строковая переменная:

String text = "
Lots of text...
some random text here
PackageName=com.company.package
more random text here";

Я думал, что код Java для получения имени моего пакета здесь будет:

Pattern pattern = Pattern.compile("PackageName=(.*)");
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
    String packageName = matcher.group(1);
}

К сожалению, matcher.find () всегдавозвращает ложьЧто я делаю не так?

Обратите внимание, я не пытаюсь получить имя пакета моего класса, и Я не пытаюсь проанализировать файл свойств Java .Я пытаюсь проанализировать некоторый текст, как указано выше, где есть парам = значение пара где-то в тексте, который мне нужно получить.Спасибо.

Ответы [ 3 ]

1 голос
/ 08 февраля 2012

Я думаю, что ваша проблема может быть в String строках вверху.Вы не можете объявить литерал String в нескольких строках в Java, вам нужно разделить их \n символами:

String text = "Lots of text...\nString=Value\nPackageName=com.company.package\nString=Value";

Чтобы сделать его более читабельным, вы можете сделать это:

String text = "Lots of text...\n" 
            + "String=Value\n" 
            + "PackageName=com.company.package\n" 
            + "String=Value";

Как только это изменение внесено, предоставленный вами код отлично работает для меня на JDK6.

Тем не менее, здесь немного улучшено регулярное выражение:

Pattern pattern = Pattern.compile("PackageName\\s*=\\s*(.*)");
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
    String packageName = matcher.group(1);
}

Единственное изменение, которое яСделано было добавить \\s*: это означает, что любой пробел (или ни один), поэтому вы можете поставить PackageName = abc и заставить его работать (обратите внимание, что сам элемент регулярного выражения на самом деле \s*, но вы должны экранировать символ \ вJava).

0 голосов
/ 08 февраля 2012

Для введенного вами ввода:

String text = "Много текста ..." + "\ n" + "String = Value" + "\ n" + "PackageName =com.company.package "+" \ n "+" String = Value ";

Код, который ВЫ написали:

Pattern pattern = Pattern.compile("PackageName=(.*)");
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
    String packageName = matcher.group(1);
    System.out.println(packageName);
}

Работает нормально, программа получает пакетname.

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

Ура, Евгений.

0 голосов
/ 08 февраля 2012

Мой код Java


 String text = "Lots of text... String=Value    PackageName=com.company.package String=Value";
        Pattern pattern = Pattern.compile("PackageName=(.*)");
        Matcher matcher = pattern.matcher(text);
        if (matcher.find()) {
            String packageName = matcher.group(1);
            System.out.println(packageName);
        }

Результат запускается:

com.company.package String = Значение

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