繁体   English   中英

Java replaceAll方法带有可变字符串和转义点

[英]Java replaceAll method with a variable string and escaped dot

我很难解决这个问题,因此请您帮忙。 这是交易:

String str = "02-EST-WHATEVER-099-00.dwg";
String newStr = str.replaceAll("([^-_\\.]+-[^-_\\.]+-[^-_\\.]+-[^-_\\.]+-)[^-_\\.]+(\\.[^-_\\.]+)", "$1$2");

上面的代码块生成02-EST-WHATEVER-099-.dwg (删除了扩展名前的最后一个“ 00”)。 太好了,这就是我所需要的!

但是我上面使用的RegEx必须动态创建(我要删除的字段可以位于其他位置)。 因此,我使用了一些代码来创建RegEx字符串(这是我刚刚声明的结果的样子):

String regexRemoveRev = "([^-_\\.]+-[^-_\\.]+-[^-_\\.]+-[^-_\\.]+-)[^-_\\.]+(\\.[^-_\\.]+)";

现在,如果我out.print(regexRemoveRev) ,我得到([^-_\\.]+-[^-_\\.]+-[^-_\\.]+-[^-_\\.]+-)[^-_\\.]+(\\.[^-_\\.]+) (注意单个反斜杠)。

当我再次尝试replaceAll时,它不起作用:

String str = "02-EST-WHATEVER-099-00.dwg";
String newStr = str.replaceAll(regexRemoveRev, "$1$2");

因此,我认为可能是因为存在单个反斜杠,所以我尝试使用其中的4个而不是2个声明regexRemoveRev:

String regexRemoveRev = "([^-_\\\\.]+-[^-_\\\\.]+-[^-_\\\\.]+-[^-_\\\\.]+-)[^-_\\\\.]+(\\\\.[^-_\\\\.]+)";

如预期的那样, out.print(regexRemoveRev)的输出是RegEx的双反斜杠版本:

([^-_\\.]+-[^-_\\.]+-[^-_\\.]+-[^-_\\.]+-)[^-_\\.]+(\\.[^-_\\.]+)

但是替换仍然不起作用!

我该如何做我想要的?

我刚刚写了一个简短的程序,在这两种情况下都可以在这里工作:

public class StringTest 
{  

    public static void main(String[] args) 
    {  
        String str = "02-EST-WHATEVER-099-00.dwg";

        String newStr = str.replaceAll("([^-_\\.]+-[^-_\\.]+-[^-_\\.]+-[^-_\\.]+-)[^-_\\.]+(\\.[^-_\\.]+)", "$1$2");

        String regexRemoveRev = "([^-_\\.]+-[^-_\\.]+-[^-_\\.]+-[^-_\\.]+-)[^-_\\.]+(\\.[^-_\\.]+)";

        String newStr1 = str.replaceAll(regexRemoveRev, "$1$2");

        System.out.println("newStr: "+newStr);
        System.out.println("regexRemoveRev: "+regexRemoveRev);
        System.out.println("newStr: "+newStr1);

    }  
} 

上面的输出:

newStr:02-EST-WHATEVER-099-.dwg
regexRemoveRev:([^- 。] +-[^- 。] +-[^- 。] +-[^- 。] +-)[^- 。] +(。[^- 。] +)
newStr:02-EST-WHATEVER-099-.dwg

我不确定为什么不为您工作! 还是您在问其他问题,我弄错了

暂无
暂无

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

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