有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java正则表达式搜索替换问题

我有一个字符串,其中包含三次出现的单词“TEST”。每个单词后面都跟有“^”,我需要检查“^”第2次和第3次出现之间的内容是否为空,如果为空/为空,请进一步搜索“^”第5次和第6次出现之间的内容是否为“”

如果为“”,则将其替换为空白/空

只要找到测试词,我就需要重复这个逻辑检查

例如:

现有字符串:

aaaa^
TEST^x^^y^z^""^cccc^bbb^
bbbb^
TEST^p^^q^r^""^lll^mmm^
TEST^P^X^q^n^""^hhh^ttt^

所需字符串:

aaaa^
TEST^x^^y^z^^cccc^bbb^
bbbb^
TEST^p^^q^r^^lll^mmm^
TEST^NOT EMPTY THUS IGNORE^X^q^n^""^hhh^ttt^

我该怎么做?非常感谢您的帮助


共 (3) 个答案

  1. # 1 楼答案

    蒂姆的回答几乎是正确的。但是,也可能出现这样的情况,即在“”之后没有第6个字符,而是其他字符。修正是

    String resultString = subjectString.replaceAll("(TEST\\^[^^]*\\^\\^[^^]*\\^[^^]*\\^)\"\"\\^", "$1^");
    
  2. # 2 楼答案

    ^是分隔符,因此可以将字符串拆分为标记:

    String[] tokens = text.split("\\^", -1);
    

    然后在该标记数组中搜索TEST,应用所需的逻辑,根据需要更新标记

    最后,输出更新后的令牌列表,以^分隔:

    for (int i=0; i<tokens.length; i++) {
        if (i > 0) {
            System.out.print("^");
        }
        System.out.print(tokens[i]);
    }
    System.out.println();
    

    这样做,您正在实现的算法将更加清晰

  3. # 3 楼答案

    String resultString = subjectString.replaceAll("(TEST\\^[^^]*\\^\\^[^^]*\\^[^^]*\\^)\"\"\^", "$1");
    

    说明:

    (       # start capturing group
     TEST   # match TEST
     \^     # match ^ (no. 1)
     [^^]*  # match 0 or more non-^ characters
     \^\^   # match ^^ (no. 2 and 3)
     [^^]*  # match 0 or more non-^ characters
     \^     # match ^ (no. 4)
     [^^]*  # match 0 or more non-^ characters
     \^     # match ^ (no. 5)
    )       # end capturing group
    ""      # match ""
    \^      # match ^ (no. 6)