Java,正则表达式捕获带有空格的字符串

时间:2012-11-09 18:01:59

标签: java regex string

这是我原来的名为'response'的字符串:

String response = "attributes[{"displayName":"Joe Smith","fact":"super"},{"displayName":"Kieron Kindle","fact":"this is great"}]";

我正在尝试解析String并提取所有id值,例如

String[0] = Joe Smith
String[1] = Kieron Kindle

Pattern idPattern = Pattern.compile("\"displayName\":(\\w)"); // regular expression
Matcher matcher = idPattern.matcher(response);

while(matcher.find()){
    System.out.println(matcher.group(1));
}

当我尝试打印该值时,屏幕上没有任何内容(也不例外)
正则表达式将"displayName":"视为左括号,将"视为右括号,然后在它们之间提取任何单词(\\w)? 感谢任何帮助! 从我的正则表达式中删除了\n个字符,这是一个格式错误,对不起家伙!

2 个答案:

答案 0 :(得分:1)

但为什么你在正则表达式中使用了\n?那应该是\"。您还使用了\\w,它只匹配一个字符。你需要使用量词。还有Reluctant one

所以,你修改过的正则表达式是这样的: -

Pattern.compile("\"displayName\":\"(\\w+?)\""); // This won't consider space

但是,由于您的String也可以包含空格,因此您不应使用\\w。它与空格不匹配。

所以,最后,你应该使用这个正则表达式,它匹配两个引号之间的任何字符,除了inverted comma本身: -

Pattern.compile("\"displayName\":\"([^\"]+)\"");

在您的代码中替换上述模式后,您的输出将如下所示: -

"Joe Smith"
"Kieron Kindle"

您可以在这些教程中阅读有关Regex的更多信息: -

答案 1 :(得分:0)

您应该使用此regex

\"displayName\":\"(.*?)\"

(.*?)匹配0到多个字符

[纠正你的正则表达式]

\"displayName\":\"([\w\s]+)\"

([\w\s]+)匹配一个单词,\w 一个空格,即\s 1到多次,+

Group1现在有数据