![](/img/trans.png)
[英]Case Insensitive variable for String replaceAll(,) method Java
[英]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.