我正在使用 Amazon Web Services 在 MapReduce 中做一个项目,我遇到了这个错误:
FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.StackOverflowError at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
我阅读了一些其他问题来理解为什么会发生这种情况,而且我的正则表达式似乎有重复的替代路径。这是正则表达式:
\\s+(?=(?:(?<=[a-zA-Z])\"(?=[A-Za-z])|\"[^\"]*\"|[^\"])*$)
它的作用是按空格拆分,除非它们位于这些符号内 < >
或者这些 " "
.所以基本上采用这两种符号内的字符串。我尝试了许多其他版本,但都没有用,所以我离最佳版本还很远。我有点迷路,这是我第一次使用这些复杂的正则表达式。有人可以为我的正则表达式提供更好的选择吗?
我将非常感谢有关此的每条反馈!
编辑:
此字符串在 <> 内包含 URL,在 ""和空格内包含文本:
<\janhaeussler.com/?sioc_type=user&sioc_id=1/>“嘿”<.org/1999/02/22-rdf-syntax-ns#type/>
应该产生这 3 个字符串:
1. <\janhaeussler.com/?sioc_type=user&sioc_id=1/>(带或不带 <>)
2.“嘿”
3. <.org/1999/02/22-rdf-syntax-ns#type/>
编辑 2:
我认为符号 <> 令人困惑。我试图找到一个由一个或多个空格分隔的正则表达式,而不考虑“”内的空格,因为 url 没有空格。
最佳答案
试试这个:
\s+(?=(?:(?:[^"]*"){2})*[^"]*$)
String string = "abc d<\\janhaeussler.com/?sioc_type=user &sioc_id=1/> \"HEY 1\" 2 3 <.org/1999/02/22-rdf-syntax-ns#type/> \"tra la\" <asdfadsf sadfasdf/> 4 \"sdf sdf\" 5 6";
String[] res=string.split("\\s+(?=(?:(?:[^\"]*\"){2})*[^\"]*$)");
System.out.println(Arrays.toString(res));
将输出:
[abc, d<\janhaeussler.com/?sioc_type=user, &sioc_id=1/>, "HEY 1", 2, 3, <.org/1999/02/22-rdf-syntax-ns#type/>, "tra la", <asdfadsf, sadfasdf/>, 4, "sdf sdf", 5, 6]
关于java - 使用正则表达式拆分字符串时的 Stackoverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44868612/