2009-10-19 88 views
1

在我的Java代码中应用正则表达式时遇到问题。
我的文本字符串是这样的(字符串MyString的)正则表达式 - 从Java中的String中提取信息

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

我需要提取的名称信息(美国广播公司防守)。名称可以包含1个字以上的字符串。所有属性(名称,等等,第二个名字)与开头部分的空格间隔

我试图使用的代码是

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,} name:\ s([\ w] * \ w +);)但是当我将它移植到java代码中时,它根本不起作用。任何想法我失踪?

非常感谢


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

回答

2

的问题是可能是.match()尝试匹配整个输入线。因此,无论是在模式的末尾添加一个。+来吃剩下的线,还是使用.contains()。 (与.match()^$在模式的开始和结束都是隐含的)

请注意,你需要的时候,你需要来匹配多行输入,提供一个标志:.compile(patternStr, Perl5Compiler.MULTILINE_MASK)

5

这里亚去:

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

谢谢你的正则表达式改进,但我认为问题是当我调用matcher.matches()。如果我使用matcher.find(),它工作正常。 – mickthompson 2009-10-19 15:11:06

相关问题