【问题标题】:Split a String Into Multiple Strings Using a Regex With Different Capture Groups使用具有不同捕获组的正则表达式将字符串拆分为多个字符串
【发布时间】:2017-07-08 01:54:52
【问题描述】:

我正在尝试将一个字符串拆分为多个字符串,而不是仅使用一个简单的正则表达式模式,而是尝试使用一个正则表达式模式,如果它检测到某些字符,它将将一个字符串拆分为不同的字符串,但是字符是不同的。它不是将字符串拆分成不同的字符串,而是给我所述字符串中的每个单独的字符。

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) 作为|| 符号,它工作得很好,但现在我希望它在||&&!= 的任何地方拆分,我希望我的代码是高效、干净且易于阅读。

【问题讨论】:

    标签: java regex string


    【解决方案1】:

    下面的 java 类会将您的示例字符串拆分为您感兴趣的部分。代码将全部拆分原始字符串 '||'和 '&&' 分隔符,全局。即,如果您有多个 '||'或原始字符串中的“&&”运算符,每个部分都将被拆分。

    需要注意的一点是需要对特殊字符进行转义 (\)。在 Java 中,您还需要转义转义符,因此您需要 2 个反斜杠才能在字符串中包含文字。

    这是一个测试正则表达式代码的好网站...Regular Expressions 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]:
    

    【讨论】:

    • 天哪,我在想管道符号有什么特殊用途,很高兴你告诉我要逃离管道!谢谢!
    • 很高兴我能帮助@AlexCouch。不要忘记为您最喜欢的答案投票,也感谢您提出的好问题!
    【解决方案2】:

    这是一个非常有趣的问题。网站上有更多答案,例如: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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 2018-09-17
      • 2014-04-22
      相关资源
      最近更新 更多