正则表达式 - 从Java中的String中提取信息

时间:2009-10-19 14:39:03

标签: java regex parsing

我在Java代码中应用正则表达式时遇到问题 我的文本字符串就像这样(String myString)

        name: Abc Def;
        blah: 1 2 3;
        second name: Ghi;

我需要提取名称信息( Abc Def )。名称可以包含1+个单词的字符串。所有属性(name,blah,second name)在开头用一些空格分隔

我正在尝试使用的代码是

String patternStr = "\\s{2,}name:\\s([\\w ]*\\w+);";
Matcher matcher = Pattern.compile(patternStr).matcher(myString);
if (matcher.matches()) 
    System.out.println(matcher.group(1));

我的正则表达式似乎与online tools正常工作(正则表达式:\ s {2,}名称:\ s([\ w] * \ w +);)但是当我将它移植到java代码时它只是没有'工作。知道我错过了什么吗?

非常感谢


编辑: 如果我使用matcher.find()它可以正常工作。

2 个答案:

答案 0 :(得分:5)

这里你去:

^\s*name:\s*([^;]+);
  • 从该行的开头开始。
  • 吃尽可能多的空白。
  • 找到“name:”
  • 吃尽可能多的空白。
  • 在下一个分号之前捕获任何内容
  • 确保有分号

答案 1 :(得分:2)

问题可能是.match( )尝试匹配整个输入行。因此,您可以在模式的末尾添加。+以使用该行的其余部分或使用.contains( )。 (使用.match( )模式开头和结尾的^$是隐含的)

请注意,当您需要与多行输入匹配时,需要提供一个标记:.compile(patternStr, Perl5Compiler.MULTILINE_MASK)