对不起,我真的不知道该怎么说。
我想将数字字符与字母字符分开。如果数字前面有连字符,我想保留它。

通过查找我之前发现的问题"(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)"

我实现的是这样的:

String s = "dfgsgf-89ff--989"; String[] pieces = s.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");

它给了我这个:

peices[0] = "dfgsgf"- peices[1] = "89" peices[2] = "ff--" peices[3] = "989"

我真正想要的是:

peices[0] = "dfgsgf" peices[0] = "-89" peices[0] = "ff" peices[0] = "--989"

什么正则表达式可以给我我想要的结果?

我已经看过Java模式页面,但是仍然很难理解特殊构造的工作方式。

最佳答案

好像您想要这样的东西,

String s = "dfgsgf-89ff--989";
String[] pieces = s.split("(?<=\\d)(?=\\D)|(?<=[A-Za-z])(?=[^A-Za-z])");
System.out.println(Arrays.toString(pieces));


要么

String[] pieces = s.split("(?<=\\d)(?=\\D)|(?<=[A-Za-z])(?=-*\\d)");


输出:

[dfgsgf, -89, ff, --989]



(?<=\\d)(?=\\D)匹配数字字符和非数字字符之间的边界。
(?<=[A-Za-z])(?=[^A-Za-z])匹配存在于字母字符和非字母字符之间的边界。

关于java - 在这种情况下,我需要Java String.split使用什么正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28401271/

10-11 05:59