Java按正则表达式拆分字符串

Java按正则表达式拆分字符串,java,regex,Java,Regex,我需要用正则表达式拆分java中的字符串,但我不太确定如何拆分。我得走了 [Caps][RCaps]C[Caps][RCaps]atalog[Caps][RCaps] 按方括号内的文字。我需要弄到绳子的所有部分 预期产出: [Caps] [RCaps] C [Caps] [RCaps] atalog [Caps] [RCaps] 方括号内的文本可以是任何内容。在本例中,它是Caps和rcap,但也可以是Potato,例如,[or]是正则表达式匹配字符,称为元字符。您需要在它之前添加转义字符\

我需要用正则表达式拆分java中的字符串,但我不太确定如何拆分。我得走了

[Caps][RCaps]C[Caps][RCaps]atalog[Caps][RCaps]
按方括号内的文字。我需要弄到绳子的所有部分

预期产出:

[Caps]
[RCaps]
C
[Caps]
[RCaps]
atalog
[Caps]
[RCaps]
方括号内的文本可以是任何内容。在本例中,它是Caps和rcap,但也可以是Potato,例如,

[or]是正则表达式匹配字符,称为元字符。您需要在它之前添加转义字符\\[或\\]

您需要尝试以下方法:

String str = "[Caps][RCaps]C[Caps][RCaps]atalog[Caps][RCaps]";
Pattern pattern = Pattern.compile("\\[?(\\w)+\\]?");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.print(matcher.group());
}
输出:

[Caps][RCaps]C[Caps][RCaps]atalog[Caps][RCaps]

[或]是正则表达式匹配的字符,称为元字符。您需要在它之前添加转义字符\\[或\\]

您需要尝试以下方法:

String str = "[Caps][RCaps]C[Caps][RCaps]atalog[Caps][RCaps]";
Pattern pattern = Pattern.compile("\\[?(\\w)+\\]?");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.print(matcher.group());
}
输出:

[Caps][RCaps]C[Caps][RCaps]atalog[Caps][RCaps]


您需要做的是在[character]之前和之后拆分,这将转换为正则表达式?=\[\124;?您需要做的是在[character]之前和之后拆分,这将转换为正则表达式?=\\[\124;?而不是拆分,您可以使用此模式捕获您想要的内容

(\[[^][]*\]|[^][]+)  

您可以使用此模式来捕获所需内容,而不是拆分

(\[[^][]*\]|[^][]+)  
试试这个

 String string = "[Caps][RCaps]C[Caps][RCaps]atalog[Caps][RCaps]";
        String[] split = string.split("\\]");
        for (String string1 : split) {
            if (string1.charAt(0) != '[') {
                int indexOf = string1.indexOf("[");
                String substring = string1.substring(0, indexOf);
                String substring1 = string1.substring(indexOf, string1.length()) + "]";
                System.out.println(substring);
                System.out.println(substring1);
            } else {
                System.out.println(string1 + "]");
            }
        }
试试这个

 String string = "[Caps][RCaps]C[Caps][RCaps]atalog[Caps][RCaps]";
        String[] split = string.split("\\]");
        for (String string1 : split) {
            if (string1.charAt(0) != '[') {
                int indexOf = string1.indexOf("[");
                String substring = string1.substring(0, indexOf);
                String substring1 = string1.substring(indexOf, string1.length()) + "]";
                System.out.println(substring);
                System.out.println(substring1);
            } else {
                System.out.println(string1 + "]");
            }
        }


他们被称为元字符。顺便说一句,OP希望括号成为输出的一部分。你怎么知道OP甚至在没有看到任何代码的情况下拆分了这些字符中的任何一个?我的意思是,是的,这是显而易见的,但仍然…@RohitJain:从他的问题来看,这似乎对我来说是显而易见的。除了元字符处理regex似乎是直接的forward.@AnkurShanbhag不完全是直截了当的,除非你知道环顾四周(look arounds),大多数regex的新手都不会知道。非常有用的回答,我选择另一个答案而不是这个答案的唯一原因是,另一个答案直接给了我一个数组,这更接近我的需要。另一方面,这个解决方案更好,因为它适用于JRE 1.8毫无例外,除了第一个解决方案,如果第一个元素为空,则需要一个特例。使用此方法,我必须自己构建数组,我认为这并没有那么快。如果我可以选择两个最佳答案,这两个答案就是。它们被称为元字符。顺便说一句,OP希望括号成为输出的一部分ut..你怎么知道OP甚至在没有看到任何代码的情况下对这些字符进行拆分?我的意思是,是的,这是显而易见的,但是…@RohitJain:从他的问题上看,这对我来说似乎是显而易见的。除了元字符处理正则表达式似乎是直截了当的。@AnkurShanbhag不完全是直截了当的,除非你最了解look arounds很明显,一个regex的新手不会知道这一点。非常有用的回答,我选择另一个答案的唯一原因是另一个答案直接给了我一个数组,这更接近我的需要。另一方面,这个解决方案更好,因为它毫无例外地在JRE 1.8上工作,而不是第一个解决方案,它需要一个特殊的情况,如果没有第一个元素是空的。使用这种方法,我必须自己构建数组,这并不像我认为的那么快。如果我能选择两个最佳答案,这两个就是了。介意给我们看一些代码吗?如果没有这些,你真的不会得到太多帮助。换句话说,你想在]之后或之前拆分[?那么你的代码有什么问题吗?介意给我们看一些代码吗?如果没有这些,你真的不会得到太多帮助。换句话说,你想在之后]或之前拆分[?那么你的代码有什么问题吗?哇,忍者。你是如何在头脑中编译正则表达式的?注意:在Java 8之前,结果将包含一个空格作为第一个数组元素。@Shahar你是什么意思?这个解决方案是在看到OP想要在之后拆分后想到的第一件事]?@Pshemo我仍然不相信我的内存,必须编译它以防万一。@Shahar经过一些经验之后,你会开始相信你的内存,因为你不需要它。Regex是关于逻辑的,而不是内存。哇,忍者。你如何在头脑中编译Regex?注意:在Java 8之前,结果将包含一个空格作为第一个数组元素@Shahar你是什么意思?这个解决方案是在看到OP想要分裂之后想到的第一件事]?@Pshemo我仍然不相信我的内存,必须编译它以防万一。@Shahar在一些经验之后,你会开始相信你的内存,因为你不需要它。正则表达式是关于逻辑的,而不是内存。这是一条路,我同意,但它不是很好看,我同意它是有效的,我已经测试过它,但多次使用子字符串增益可能有点低效。但是,响应本身是好的,它可能会在其他用途中派上用场;应该有任何一个delimeter或字符,这样它就可以被拆分,因为我使用了子字符串。我了解你的想法是如何工作的,我刚刚检查了它,它似乎相当快,我已经有了另一个想法
在哪里使用这个;我同意,这是一条路要走,但它并不好看,我同意它是可行的,我已经测试过了,但反复使用子字符串可能有点低效。然而,响应本身是好的,它可能会在其他用途中派上用场;应该有任何一个delimeter或字符,以便它可以被分割,因为我使用了substring。我了解你的想法是如何工作的,我刚刚检查了它,它似乎相当快,我已经有了另一个想法在哪里使用这个;