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
现在拥有数据