繁体   English   中英

使用正则表达式排除模式

[英]Exclude a Pattern using Regex

我有一个理解正则表达式的问题。 我希望能够收集的是字符串末尾的大写字母。 列出的字符串只是我拥有的众多字符串的一个示例,因此专门搜索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")) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM