Java(Regex?)在数字/字母组合之间拆分字符串

时间:2012-11-14 06:42:10

标签: java regex string split explode

我一直在查看Google搜索结果的页面和页面,但没有找到任何可以帮助我的内容。

我要做的是拆分像Bananas22Apples496Pears3这样的字符串,并将其分解为某种可读格式。由于String.split()无法做到这一点,我想知道是否有人可以指出我可以完成此任务的正则表达式片段。

扩展一下:为简单起见,上面的字符串将被拆分为(String[]):

{"Bananas:22", "Apples:496", "Pears:3"}

5 个答案:

答案 0 :(得分:4)

试试这个

String s = "Bananas22Apples496Pears3";

String[] res = s.replaceAll("(?<=\\p{L})(?=\\d)", ":").split("(?<=\\d)(?=\\p{L})");
    for (String t : res) {
        System.out.println(t);
    }

第一步是用“:”替换空字符串,左边是带lookbehind assertion (?<=\\p{L})的字母,右边是数字,{{ 3}} (?=\\d)

然后拆分结果,左边是数字,右边是字母。

\\p{L}lookahead assertion,匹配每种语言的每个字母。

答案 1 :(得分:3)

你需要Replace然后split字符串。你不能单独拆分

1&gt; Replace All包含以下正则表达式的字符串

(\\w+?)(\\d+)

并将其替换为

$1:$2

2&gt; 现在Split使用此正则表达式

(?<=\\d)(?=[a-zA-Z])

答案 2 :(得分:1)

这应该做你想要的:

import java.util.regex.*;

String d = "Bananas22Apples496Pears3"

Pattern p = Pattern.compile("[A-Za-z]+|[0-9]+");

Matcher m = p.matcher(d);

while (m.find()) {
      System.out.println(m.group());
}

// Bananas
// 22
// Apples
// 496
// Pears
// 3

答案 3 :(得分:0)

\d+替换为:$0,然后将其拆分为(?=[a-zA-Z]+:\d+)

答案 4 :(得分:0)

String myText = "Bananas22Apples496Pears3";
System.out.println(myText.replaceAll("([A-Za-z]+)([0-9]+)", "$1:$2,"));