Java正则表达式在数字之后拆分字符串

时间:2014-06-26 13:46:03

标签: java regex

抱歉,还有另一个正则表达式问题!我有一个未知长度的字符串,其中包含以下模式:

"abc1defg2hijk23lmn19"

我需要拆分字符串以获得以下内容:

["abc1", "DefG2", "hiJk23", "lmn19"]

非常简单我只需要在每次数字之后拆分。该数字可以是任何非零数字。

我可以像这样进行正面查找:

a.split("(?=\\d+)");

然而,这实际上是将数字分开而不是前面的字母组和数字。

我目前的尝试看起来像这样,但不起作用:

a.split("(?=[A-Za-z]+\\d+)");

3 个答案:

答案 0 :(得分:2)

用数字+空格替换数字,然后在空格上分割。

a = a.replaceAll("[0-9]+","$1 ");
String[] b = a.split(" ");

如果您的字符串包含其他空格,也可以通过替换保证不会出现在字符串中的字符而不是空格来定制它。我最喜欢的是(§)。

答案 1 :(得分:2)

所以输入

abc1defg2hijk23lmn19

您想要找到标有|

的地方
abc1|defg2|hijk23|lmn19

换句话说,你想找到

的地方
  • (?<=[0-9])
  • 之前有数字
  • 并在(?=[a-zA-Z])
  • 后按字母顺序排列

(我假设您熟悉look-around机制)。

在这种情况下使用

split("(?<=[0-9])(?=[a-zA-Z])")

表示将数字和字母字符放在1|a之间,其中|代表这样的地方。


示例:

String data ="abc1defg2hijk23lmn19";
for (String s: data.split("(?<=[0-9])(?=[a-zA-Z])"))
    System.out.println(s);

输出:

abc1
defg2
hijk23
lmn19

答案 2 :(得分:1)

您可以使用此正则表达式进行拆分:

(?<=\\d)(?=\\D)

Working Demo