正则表达式 - 从Java中的String中提取信息
问题描述:
在我的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(),它工作正常。
答
的问题是可能是.match()
尝试匹配整个输入线。因此,无论是在模式的末尾添加一个。+来吃剩下的线,还是使用.contains()
。 (与.match()
的^
和$
在模式的开始和结束都是隐含的)
请注意,你需要的时候,你需要来匹配多行输入,提供一个标志:.compile(patternStr, Perl5Compiler.MULTILINE_MASK)
答
这里亚去:
^\s*name:\s*([^;]+);
- 开始在该行的开头。
- 吃尽可能多的空白。
- 找到“name:”
- 尽可能地多吃一些空白。
- 捕捉任何下一分号之前
- 确保有一个分号
谢谢你的正则表达式改进,但我认为问题是当我调用matcher.matches()。如果我使用matcher.find(),它工作正常。 – mickthompson 2009-10-19 15:11:06