从模式中提取单词

prg*_*shn 4 java regex

我有String s = "#stack###over##flow".怎么分裂s才有

String[] a = {"#", "stack", "###", "over", "##", "flow}
Run Code Online (Sandbox Code Playgroud)

我试图s.split("(?<=#)|(?=#)")如何分割字符串,但也保持分隔符?但它给了

String[] a = {"#", "stack", "#", "#", "#", "over", "#", "#", "flow}
Run Code Online (Sandbox Code Playgroud)

hwn*_*wnd 5

该lookarounds需要多一点自信,这意味着向后看需要断言以下位置可以是一个单词字符或不#与前瞻需要断言前面的位置可以是一个单词字符或不#作为好.

您可以在每次更改中使用单词边界:

String s = "#stack###over##flow";
String[] a = s.split("(?<=#\\b)|(?=\\b#)");
System.out.println(Arrays.toString(a)); //=> [#, stack, ###, over, ##, flow]
Run Code Online (Sandbox Code Playgroud)

或修改您的外观断言(更长的方法):

String[] a = s.split("(?<=#(?!#))|(?<=[^#](?=#))");
Run Code Online (Sandbox Code Playgroud)