对于这种情况,Java String.split需要什么正则表达式

时间:2015-02-09 00:53:16

标签: java regex split

对不起,我真的不知道如何说出我希望如何工作。 我想从字母字符中分割数字字符。如果数字前面有连字符,我想保留它。

回顾之前的问题,我找到了"(?<=\\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 Patterns页面,但我仍然无法理解特殊构造的工作原理。

1 个答案:

答案 0 :(得分:0)

好像你想要这样的东西,

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

OR

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

<强>输出:

[dfgsgf, -89, ff, --989]
  • (?<=\\d)(?=\\D)匹配数字字符和非数字字符之间存在的边界。

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