使用不同捕获组的正则表达式将字符串拆分为多个字符串

5
我正在尝试将一个字符串拆分成多个字符串,但不是只使用一个简单的正则表达式模式,而是尝试使用一个正则表达式模式,如果检测到某些字符,则将字符串拆分为不同的字符串,但这些字符是不同的。它没有将字符串拆分成不同的字符串,而是给我该字符串中每个字符。
String[] splitstr = line.split("([&]{2})?([|]{2})?(!=)?");

使用上面的代码,我有一个变量叫做line,例如,我将从文件中读取这一行:

:if[input=right || input=Right]:

我想知道有没有一种方法可以将这个拆分成

":if[input=right", "input=Right]:"

如果我加入这样一行:

:if[input=right || input=Right && input != null]:

以便将其分割成

":if[input=right", "input=Right", "input != null]:"

我曾使用 String#split(regex) 函数来按照 || 符号进行分割,这个方法很好用。但现在我想要按照 ||&& 或者 != 进行分割,而且我希望我的代码既高效又简洁易读。

2个回答

2
下面的Java类将把你的示例字符串分成你感兴趣的部分。该代码将在所有“||”和“&&”分隔符处全局拆分原始字符串。也就是说,如果您的原始字符串中有多个“||”或“&&”运算符,则每个部分都将被拆分出来。
需要注意的一点是需要转义(\)特殊字符。在Java中,您还需要转义转义符,因此您需要使用2个反斜杠才能在字符串中使用文本。
这是一个很棒的网站,可以测试正则表达式代码...正则表达式101
public class splitStrRegex {

    public static void main(String[] args) {

        String myStr = ":if[input=right || input=Right && input != null]:";
        String[] myStrings = myStr.split("\\|\\||&&");
        for(int i = 0; i < myStrings.length; i++) {
            System.out.println(myStrings[i].trim());
        }
    }
}

输出:

:if[input=right
input=Right
input != null]:

哦我的天啊,我一直以为竖线符号有特别的用途,很高兴你告诉我要转义竖线!谢谢! - Alex Couch
很高兴能帮到你,@AlexCouch。别忘了为你最喜欢的答案投票,还有感谢你提出这个好问题! - MJFoster

0

这是一个非常有趣的问题。在网站上有更多的答案,例如:Java String.split() Regex 此外,它很容易检查,比如:

public class Reg {

    public static void main(String args[]) {
        String string = "00!=4-0||34 & 55!=6";
        String[] parts = string.split("[&||!=]");
        for (int i = 0; i < parts.length; i++) {
            System.out.println("Part: " + parts[i]);
        }
    }
}

输出:

Part: 00
Part: 
Part: 4-0
Part: 
Part: 34 
Part:  55
Part: 
Part: 6

但是在符号 "&&" 方面遇到了问题,例如:

    String string = "00!=4-0||34 && 55!=6";
    String[] parts = string.split("[&&||!=]");

输出:

Part: 00
Part: 
Part: 4-0
Part: 
Part: 34 && 55
Part: 
Part: 6

我猜我们需要理解&&的其他解释,例如:

public class Reg {

    public static void main(String args[]) {
        String string = "00!=4-0||34 && 55!=6";
        String[] parts = string.split("[&^&||!=]");
        for (int i = 0; i < parts.length; i++) {
            System.out.println("Part: " + parts[i]);
        }
    }
}

输出:

Part: 00
Part: 
Part: 4-0
Part: 
Part: 34 
Part: 
Part:  55
Part: 
Part: 6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接