我有这个数据
ReferenceDataLocation = as
##############################################################################
#
# LicenseKey
# Address Doctor License
#
##############################################################################
LicenseKey = al
我只想捕获键值对,例如:ReferenceDataLocation = as
和LicenseKey = al
我写了(?xms)(^[\w]+.*?)(?=^[\w]+|\z)
正则表达式,这是完美的,除了它还捕获#####
部分,这不是键值对。
请帮我修改相同的正则表达式(?xms)(^[\w]+.*?)(?=^[\w]+|\z)
,以便只获取ReferenceDataLocation = as
和LicenseKey = 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)
答案 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文档)。
请参阅: