2011-11-04 31 views
0

我有这样的数据正则表达式来只获取键值对,并省略一些charaters

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是正则表达式对我的作品

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

只是为了说了这么:正则表达式是不正确的解决方案来解析文件。改为编写一个可靠的解析器。 –

回答

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文档)。

请参见:

+0

也感谢这个'(?xms)(^ [\ w] +。*?)(?=^[\ w^\ s] + | \ z)'正则表达式的工作。此外,如果我不知道'钥匙'在这种情况下,我该怎么办呢? – abi1964

+0

@AbhishekSimon,但您的解决方案拒绝以空格开头的密钥(在属性文件中有效)。你不同意我的建议不那么脆弱,更容易维护吗?我是正则表达式的忠实粉丝,但我不明白为什么你会这样做。 –

+0

是的,这是真的,我同意你的解决方案:)但在我的情况下,我不知道关键值 – abi1964