Java 使用正则表达式排除模式

Java 使用正则表达式排除模式,java,regex,Java,Regex,我在理解正则表达式时遇到问题。我只想收集字符串末尾的大写字母。列出的字符串只是我拥有的众多字符串的一个示例,因此专门搜索STWR、STW或ST将不起作用。按照我的正则表达式的工作方式,我的成绩一直是II或III。有没有办法收集我想要的信息,但不包括II或III?我是否能够在我的正则表达式模式中完成它,或者我需要一个if循环?这是我的代码和我尝试过的if循环。任何帮助都将不胜感激 public class First { public static void main(String[] args)

我在理解正则表达式时遇到问题。我只想收集字符串末尾的大写字母。列出的字符串只是我拥有的众多字符串的一个示例,因此专门搜索STWR、STW或ST将不起作用。按照我的正则表达式的工作方式,我的成绩一直是II或III。有没有办法收集我想要的信息,但不包括II或III?我是否能够在我的正则表达式模式中完成它,或者我需要一个if循环?这是我的代码和我尝试过的if循环。任何帮助都将不胜感激

public class First {
public static void main(String[] args) {
    String one = "Star Wars I - 00001 - STWR ep1";
    String two = "Star Wars II - 00002 - STW ep2";
    String three = "Star Wars III - 00003 - ST ep3";

    Pattern p = Pattern.compile("([A-Z]{2,4})|[A-Z]{2}");

    Matcher m = p.matcher(one);
    m.find();
    String answer1 = m.group();
    System.out.println("This is answer 1: " + answer1);

    Matcher n = p.matcher(two);
    n.find();
    String answer2 = n.group();
    System.out.println("This is answer 2: " + answer2);

    Matcher o = p.matcher(three);
    o.find();
    String answer3 = o.group();
    System.out.println("This is answer 3: " + answer3);

    if (answer2 == "II" | answer2 == "III") {
        p = Pattern.compile("([A-Z]{3,4})");
                    System.out.println(answer2);
    }
}

}

您可以使用负前瞻使用此正则表达式:

"\\b((?!I+\\b)[A-Z]{2,4})\\b"

使用以下语句获取结尾处的大写字母:

String caps = str.replaceAll(".*?([A-Z]+)[^A-Z]*$", "$1");
正则表达式捕获目标,然后作为反向引用返回


还有-Bug警报

if (answer2 == "II" | answer2 == "III") {
您不能使用
==
在Java中比较字符串!改用
.equals()

if (answer2.equals("II") || answer2.equals("III")) {

@Luiggi Mendoza,我应该说明,除了上述三个值之外,还有其他字符串包含其他值,因此我无法具体查找这些值。我希望能够从这些字符串中收集到的是STWR,STW,或者,你应该编辑你的问题并发布你真正想要/需要的。你应该给出正则表达式应该匹配的所有可能模式的示例,否则你将不会得到有用的答案。你们都是对的,我应该更具体一些。我编辑了我的问题,让我知道它是否仍然有误导性。
==“II”
不,不,不。阅读。谢谢你的帮助,你的答案很好。你能给我解释一下吗\\b和?!具体地说,do?
\b
表示单词边界,
(?!…)
表示否定前瞻。这将确保当只有一个或多个
I
字母时,
(?!I+\\b)
将失败。我不确定这是如何回答问题的。感谢稍后提供的有用信息。这就解释了为什么我一直在兜圈子。看起来我需要重读我正在读的书中的一章。@AmalMurali。单线解决方案。