Java 使用正则表达式分别对一些数字分组

Java 使用正则表达式分别对一些数字分组,java,regex,Java,Regex,我需要使用具有以下示例配置的正则表达式解析字符串: A1B135 W43T1236 我需要在字符串末尾将这些数字分成不同的组 因此,对于A1B135: group A group 1 group B group 1 group 3 group 5 但是两个字母之间的数字必须在一组中出现 因此,对于W43T1236: group W group 43 group T group 1 group 2 group 3 group 6 我认为你需要的是前瞻性的东西 public class Tes

我需要使用具有以下示例配置的正则表达式解析字符串:

A1B135
W43T1236
我需要在字符串末尾将这些数字分成不同的组

因此,对于A1B135:

group A
group 1
group B
group 1
group 3
group 5
但是两个字母之间的数字必须在一组中出现

因此,对于W43T1236:

group W
group 43
group T
group 1
group 2
group 3
group 6
我认为你需要的是前瞻性的东西

public class Tester {

    public static void main(String[] args) {
        // String to be scanned to find the pattern.
        String line = "W43T1236";
        String pattern = "([A-Z]|[0-9]+(?=.*[A-Z])|[0-9])";

        // Create a Pattern object
        Pattern r = Pattern.compile(pattern);

        // Now create matcher object.
        Matcher m = r.matcher(line);

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

}
输出:

W
43
T
1
2
3
6

如果字符串可以任意大,那么我不相信这可以做到。请参阅:。谢谢。此链接已经非常有用。幸运的是,这个数字不会太大。1个字母后接最多2个数字,然后是1个字母,然后是最多7个数字。
([A-Z])(\d{0,2})([A-Z])(\d{0,7})
为什么?一个简单的模式suffices@hjpotter92,如果所有输入数据都遵循提供的模式,则可以使用更简单的表达式。我无法从这个问题中分辨出来,所以我提供了一个适用于示例以及“A12B34C5678D123”等字符串的答案。我还相信,您提供的模式中的最后一个捕获组不会像
(\d)+
那样分隔数字。“幸运的是,这不会太大。1个字母后跟最多2个数字,然后是1个字母,然后是最多7个数字”+1表示答案,你是一个比我更敏锐的评论读者。我想知道你在引用什么,刚刚看到:)它可以重写为
\d++(?=[a-Z])|[a-Z\d]
[0-9]++(?=[a-Z])|[a-Z0-9]
。从捕获组0中获取