正则表达式解析文本块与Java属性文件格式类似

时间:2012-02-08 01:14:24

标签: java regex

我有以下字符串变量:

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()总是返回false。我做错了什么?

请注意,我尝试检索我的类的包名称,我不是要解析java属性文件。我试图解析一些文本,如上所述,在我需要检索的文本中的某处有一个param = value对。谢谢。

3 个答案:

答案 0 :(得分:1)

我认为您的问题可能位于顶部的String行。您不能在Java中多行声明String字面值,您需要将它们分隔为\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并让它工作(注意正则表达式项本身实际上是{{1}但是你必须在Java中转义\s*字符。

答案 1 :(得分:0)

对于您提供的输入:

  

String text =“LOT of 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);
}

工作正常,它会检索包名称。

除非您有任何要添加的内容以澄清问题,以及出现了什么问题,否则这甚至都不是问题,一切正常。 :)

干杯,尤金。

答案 2 :(得分:-2)

我的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 = Value