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

这是我原来的名为’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字符,这是一个格式错误,抱歉伙计们!

但为什么你在你的正则表达式中使用\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的更多信息: –

你应该使用这个regex

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

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

或者 [纠正你的正则表达式]

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

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

Group1现在拥有数据