正则表达式只获取键值对并省略一些字符

时间:2011-11-04 09:00:22

标签: java regex

我有这个数据

ReferenceDataLocation = as


##############################################################################
#
#   LicenseKey
#       Address Doctor License
#
##############################################################################
LicenseKey = al

我只想捕获键值对,例如:ReferenceDataLocation = asLicenseKey = al

我写了(?xms)(^[\w]+.*?)(?=^[\w]+|\z)正则表达式,这是完美的,除了它还捕获#####部分,这不是键值对。

请帮我修改相同的正则表达式(?xms)(^[\w]+.*?)(?=^[\w]+|\z),以便只获取ReferenceDataLocation = asLicenseKey = al

注意:Here您可以尝试

更新

我试过(?xms)(^[\w]+.*?)(?=^[\w^#]+|\z)它在site中有效,但在java中给我一个错误

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 31
(?xms)(^[\w]+.*?)(?=^[\w^#]+|\Z)
                               ^

适合我的Updat Regex

(?xms)(^[\w]+.*?)(?=^[\w^\s]+|\z)

1 个答案:

答案 0 :(得分:5)

你不能用一个简单的正则表达式匹配来做到这一点。你无法解释这些事件:

# some words here LicenseKey = al

正则表达式引擎无法从LicenseKey看到后面的行尾。 Java的正则表达式引擎(无界后视镜)不支持此功能。

但你发布的内容看起来只是一个属性文件。试试这个:

import java.io.FileInputStream;
import java.util.Properties;

public class Main {
    public static void main(String[] args) throws Exception {
        Properties properties = new Properties();
        properties.load(new FileInputStream("test.properties"));
        System.out.println(properties.getProperty("ReferenceDataLocation"));
        System.out.println(properties.getProperty("LicenseKey"));
        System.out.println(properties.getProperty("foo"));
    }
}

将打印:

as
al
null

请注意,您的输入文件无需调用test.properties,您可以为其指定任何名称。

如果你事先不知道密钥,你可以简单地遍历属性文件中的所有条目,如下所示:

for(Map.Entry<Object, Object> entry : properties.entrySet()) {
  System.out.println(entry.getKey() + " :: " + entry.getValue());
}

打印:

LicenseKey :: al
ReferenceDataLocation :: as

还有Properties#stringPropertyNames()返回Set<String>代表属性文件中的所有键(有关详细信息,请参阅API文档)。

请参阅: