Java正则表达式

Java正则表达式,java,regex,Java,Regex,我需要删除某个项目列表末尾的一些字符。这些字符始终是相同的C、CD、PDF、CPDF、M,使用此正则表达式,我可以消除它们: str.replaceAll("(C|CD|PDF|CPDF|M)$", ""); 但是,我无法反转此表达式:我希望能够通过删除字符串的其余部分来进行隔离,例如,如果这些代码位于字符串的末尾,则可以删除其中的任何代码。我试过这个: str.replaceAll!C | CD | PDF | CPDF | M$ 我可能使用了一些字符串函数,但我确信只使用正则表达式是可能的

我需要删除某个项目列表末尾的一些字符。这些字符始终是相同的C、CD、PDF、CPDF、M,使用此正则表达式,我可以消除它们:

str.replaceAll("(C|CD|PDF|CPDF|M)$", "");
但是,我无法反转此表达式:我希望能够通过删除字符串的其余部分来进行隔离,例如,如果这些代码位于字符串的末尾,则可以删除其中的任何代码。我试过这个:

str.replaceAll!C | CD | PDF | CPDF | M$


我可能使用了一些字符串函数,但我确信只使用正则表达式是可能的。

您已经在使用括号来捕获匹配的组,现在只需引用该组即可

    Matcher m = Pattern.compile("(C|CD|PDF|CPDF|M)$").matcher("165N1JCD");
    while (m.find()) {
        System.out.println(m.group(1)); // prints out "CD"
    }

您已经在使用括号捕获匹配的组,现在只需引用该组即可

    Matcher m = Pattern.compile("(C|CD|PDF|CPDF|M)$").matcher("165N1JCD");
    while (m.find()) {
        System.out.println(m.group(1)); // prints out "CD"
    }

与Josh Hight相同,只是regexp允许获取这两个部分

 Matcher m = Pattern.compile("(.*)(C|CD|PDF|CPDF|M)$").matcher("165N1JCD");
    while (m.find()) {
        System.out.println(m.group(1)); // prints out "165N1J"
        System.out.println(m.group(2)); // prints out "CD"
    }

与Josh Hight相同,只是regexp允许获取这两个部分

 Matcher m = Pattern.compile("(.*)(C|CD|PDF|CPDF|M)$").matcher("165N1JCD");
    while (m.find()) {
        System.out.println(m.group(1)); // prints out "165N1J"
        System.out.println(m.group(2)); // prints out "CD"
    }

您可以使用Matcher类获取特定的组,并删除后缀,然后执行replaceAll操作。另一种选择是将表达式设为两个组,一个是您拥有的,另一个是在它之前的,用于其他所有操作。

您可以使用Matcher类获取特定组(您删除的后缀),并执行replaceAll操作。另一种选择是将表达式设为两个组,一个是您拥有的组,另一个是它之前的组,用于其他所有内容。

如果不想使用Matcher类,可以使用replaceAll:

str.replaceAll(".*(C|CD|PDF|CPDF|M)$", "$1");

如果不想使用Matcher类,可以使用replaceAll:

str.replaceAll(".*(C|CD|PDF|CPDF|M)$", "$1");

你说的“颠倒这个表达式”是什么意思?你到底想达到什么目的?听起来他好像想删除所有不在该集中的后缀。但是,这没有道理,所以我不确定。我猜他想知道他到底删除了什么。我编辑了描述来回答你的问题。基本上,如果我得到这个字符串:165N1JCD,我想得到CD部分。既然我能得到165N1J的部分,我想这没什么大不了的。谢谢你的回答,我从没想到在这么短的时间内会有这么多反馈!你说的“颠倒这个表达式”是什么意思?你到底想达到什么目的?听起来他好像想删除所有不在该集中的后缀。但是,这没有道理,所以我不确定。我猜他想知道他到底删除了什么。我编辑了描述来回答你的问题。基本上,如果我得到这个字符串:165N1JCD,我想得到CD部分。既然我能得到165N1J的部分,我想这没什么大不了的。谢谢你的回答,我从没想到在这么短的时间内会有这么多反馈!