我遇到了理解正则表达式的问题。我希望能够收集的是字符串末尾的大写字母。列出的字符串只是我拥有的众多字符串的一个例子,因此专门搜索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);
}
}
}
答案 0 :(得分:2)
答案 1 :(得分:1)
使用以下语句在结尾处获取大写字母:
String caps = str.replaceAll(".*?([A-Z]+)[^A-Z]*$", "$1");
正则表达式捕获目标,然后作为反向引用返回。
另外 - Bug警告!
if (answer2 == "II" | answer2 == "III") {
您无法使用==
来比较Java中的字符串!请改用.equals()
:
if (answer2.equals("II") || answer2.equals("III")) {