7

我一直在浏览 Google 结果的页面和页面,但没有发现任何可以帮助我的东西。

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

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

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

5 回答 5

4

试试这个

String s = "Bananas22Apples496Pears3";

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

第一步是用“:”替换空字符串,左侧是带有后向断言 (?<=\\p{L})的字母,右侧是带有前瞻断言 (?=\\d)的数字。

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

\\p{L}是一个Unicode 属性,它匹配每种语言中的每个字母。

于 2012-11-14T07:01:21.627 回答
3

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

1> Replace All具有以下正则表达式的字符串

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

并将其替换为

$1:$2

2>现在Split用这个正则表达式

(?<=\\d)(?=[a-zA-Z])
于 2012-11-14T06:50:50.333 回答
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
于 2012-11-14T07:07:37.703 回答
0

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

于 2012-11-14T06:51:11.503 回答
0
String myText = "Bananas22Apples496Pears3";
System.out.println(myText.replaceAll("([A-Za-z]+)([0-9]+)", "$1:$2,"));
于 2012-11-14T07:29:31.390 回答