gpt4 book ai didi

带有变量字符串和转义点的 Java ReplaceAll 方法

转载 作者:行者123 更新时间:2023-12-01 14:58:55 26 4
gpt4 key购买 nike

我很难解决这个问题,所以我请求你的帮助。交易如下:

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

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

但是我上面使用的正则表达式必须动态创建(我要删除的字段可以位于不同的位置)。因此,我使用了一些代码来创建 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) 的输出是正则表达式的双反斜杠版本,正如预期的那样:

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

但是替换还是不行!

我怎样才能让它做我想做的事?

最佳答案

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

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: ([^-.]+-[^-.]+-[^-.]+-[^-.]+-)[^-< em>.]+(.[^-.]+)
newStr:02-EST-WHATEVER-099-.dwg

我不知道为什么不适合你!或者是你问的其他问题而我错了

关于带有变量字符串和转义点的 Java ReplaceAll 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13973681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com