在Java中使用Regex进行分组

在Java中使用Regex进行分组,java,regex,grouping,Java,Regex,Grouping,我是新加入regex的,很抱歉我的noobish问题 我的问题是我想在字符串上分组数据 我想要的是ff: a-za-z或a-za-z0-9(例如:abc、bzc15,但不是1abc或14bc) 0-9(例如:1、23、56等) 这些运算符+*-/ 空白处 (和) 我想把它们组合成一个数组,如果可能的话,保留它们的位置 例如: String test = "a + b + 6"; 结果应该是这样的 Array[0] = a Array[1] = White Space Array[2] = +

我是新加入regex的,很抱歉我的noobish问题
我的问题是我想在字符串上分组数据

我想要的是ff:

  • a-z
    a-z
    a-z
    a-z
    0-9(例如:abc、bzc15,但不是1abc或14bc)
  • 0-9
    (例如:1、23、56等)
  • 这些运算符
    +
    *
    -
    /
  • 空白处
  • 我想把它们组合成一个数组,如果可能的话,保留它们的位置

    例如:

    String test = "a + b + 6";
    
    结果应该是这样的

    Array[0] = a
    Array[1] = White Space
    Array[2] = +
    Array[3] = White Space
    Array[4] = b
    Array[5] = White Space
    Array[6] = +
    Array[7] = White Space
    Array[8] = 6
    
    这可能吗?如果是,我应该使用什么模式
    任何帮助都将收到通知

    请尝试以下操作:

    char[] charArr = test.toCharArray();
    
    String[] array = test.split("((?<=\\S)(?=\\s))|((?<=\\s)(?=\\S))");
    
    例如:

    public static void main(String[] args) {
        String test = "a + b + 6";
        char[] charArr = test.toCharArray();
        System.out.println(Arrays.toString(charArr));
    }
    
    输出:

    [a,  , +,  , b,  , +,  , 6]
    
    试试这个:

    char[] charArr = test.toCharArray();
    
    String[] array = test.split("((?<=\\S)(?=\\s))|((?<=\\s)(?=\\S))");
    
    例如:

    public static void main(String[] args) {
        String test = "a + b + 6";
        char[] charArr = test.toCharArray();
        System.out.println(Arrays.toString(charArr));
    }
    
    输出:

    [a,  , +,  , b,  , +,  , 6]
    
    试试这个:

    char[] charArr = test.toCharArray();
    
    String[] array = test.split("((?<=\\S)(?=\\s))|((?<=\\s)(?=\\S))");
    
    String[]array=test.split(((?试试这个:

    char[] charArr = test.toCharArray();
    
    String[] array = test.split("((?<=\\S)(?=\\s))|((?<=\\s)(?=\\S))");
    

    String[]array=test.split(((?我在这里猜测,但我认为您想要解析数学语句,或者换句话说,您正在尝试执行词法分析-)

    您可能想考虑java开发的一个完全的词法分析/ PARSIER生成器,它是一个简单的解决方案,我唯一使用的是CUP,它非常容易使用。 另一方面,您需要编写一些自定义解析器代码


    String[]array=test.split(((?我在这里猜测,但我认为您想要解析数学语句,或者换句话说,您正在尝试执行词法分析-)

    您可能想考虑java开发的一个完全的词法分析/ PARSIER生成器,它是一个简单的解决方案,我唯一使用的是CUP,它非常容易使用。 另一方面,您需要编写一些自定义解析器代码


    String[]array=test.split((?我想这个正则表达式可以满足您的需要:

    "((?<=\\d)(?=\\p{Alpha}))|((?<=\\w)(?=\\W))|((?<=\\W)(?=\\w))|((?<=\\W)(?=\\W))"
    

    ((?我认为这个正则表达式可以满足您的需要:

    "((?<=\\d)(?=\\p{Alpha}))|((?<=\\w)(?=\\W))|((?<=\\W)(?=\\w))|((?<=\\W)(?=\\W))"
    

    ((?您可以使用test.toCharArray()获取字符数组的每个元素并将其转换为int,然后从ANSI图表中获取其表示形式并输出,如果使用
    test.tochararry()可能比regexIf更简单)
    我不能用这样的东西来分组数据
    ab+b
    请看我的答案,你需要一个解析器来完成你建议的任务,除非你想强迫你的用户使用一大堆额外的空格。你可以使用test.tocharray()可能获取字符数组的每个元素并将其转换为int,然后从ANSI图表中获取其表示形式并输出,这可能比我使用的regexIf
    test.tochararry()更容易
    我不能用这样的东西来分组数据
    ab+b
    请看我的答案,你需要一个解析器来完成你建议的任务,除非你想强迫你的用户使用一大堆额外的空格。哇,你明白了,兄弟。但是你能给我解释一下模式吗?我没想到模式会这么短。伙计谢谢,你明白了吗,兄弟。但是你能给我解释一下这个模式吗?我没想到这个模式会这么短。很多人都觉得你的观点很好。但是我的任务是开发我自己的词法分析器,所以我真的不能用一个现成的项目。无论如何,谢谢,我想投票支持你的帖子,但为什么我不能?我看到你的观点很好。B但是我的任务是开发我自己的词法分析器,所以我真的不能使用一个现成的项目。无论如何,谢谢,我想投票支持你的帖子,但为什么我不能?如果我使用test.tochararry()我不能用这样的
    ab+b
    来分组数据。无论如何,如果我使用test.tochararry()我就要感谢你了我不能用这样的
    ab+b
    对数据进行分组。无论如何,谢谢