如何以优化的方式删除提到的字符串?

时间:2019-05-27 12:01:21

标签: java regex

嗨,我有一个问题,我必须从字符串中删除一些不需要的字符。 例如,如果字符串是 Hi Uim IMAGE [rofl] test ,那么我希望它类似于 Hi Uim rofl test 。我不想使用字符串替换对IMAGE [以及结束语]进行硬编码。除了IMAGE之外,ALLCAPS中可以有任何单词。

我已经写了类似下面的内容,但希望可以通过更好的方式完成。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

    public static void main(String[] args) {
        String test = "";
        String in = "Hi Uim IMAGE [rofl] test IMAGE [rofl] notify the bull";
        String[] split = in.split("IMAGE \\[(.*?)\\]");
        System.out.println(split);
        Pattern p = Pattern.compile("IMAGE \\[(.*?)\\]");
        Matcher m = p.matcher(in);
        int i = 0;
        while (m.find()) {
            String group = m.group(1);
            System.out.println(group);
            test = test + split[i++] + group;
        }
        for (int var = i; var < split.length; var++) {
            test = test + split[var];
        }
        System.out.println(test);
    }

}

这有一个问题,例如我必须遍历它。有没有更好的方法可以做到这一点。

1 个答案:

答案 0 :(得分:2)

您可以使用

in = in.replaceAll("\\b[A-Z]+\\s*\\[([^\\]\\[]*)]", "$1");

请参见regex demo

正则表达式详细信息

  • \b[A-Z]+-单词边界和1个以上大写ASCII字母
  • \s*-超过0个空格
  • \[-一个[字符
  • ([^\]\[]*)-第1组($1):除[]以外的任何0+个字符
  • ]-一个]字符。