我在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()它可以正常工作。
答案 0 :(得分:5)
这里你去:
^\s*name:\s*([^;]+);
答案 1 :(得分:2)
问题可能是.match( )
尝试匹配整个输入行。因此,您可以在模式的末尾添加。+以使用该行的其余部分或使用.contains( )
。
(使用.match( )
模式开头和结尾的^
和$
是隐含的)
请注意,当您需要与多行输入匹配时,需要提供一个标记:.compile(patternStr, Perl5Compiler.MULTILINE_MASK)