我很难弄清楚这一点,所以我请求你的帮助。这是交易:
String str = "02-EST-WHATEVER-099-00.dwg";
String newStr = str.replaceAll("([^-_\\.]+-[^-_\\.]+-[^-_\\.]+-[^-_\\.]+-)[^-_\\.]+(\\.[^-_\\.]+)", "$1$2");
上面的代码块导致02-EST-WHATEVER-099-.dwg
(删除了最后一个“00”,就在扩展之前)。太好了,这就是我需要的!
但是我上面使用的 RegEx 必须动态创建(我要删除的字段可以在不同的位置)。因此,我使用了一些代码来创建 RegEx 字符串(如果我刚刚声明它,结果如下所示):
String regexRemoveRev = "([^-_\\.]+-[^-_\\.]+-[^-_\\.]+-[^-_\\.]+-)[^-_\\.]+(\\.[^-_\\.]+)";
现在,如果 I 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)
正则表达式的双反斜杠版本,正如预期的那样:
([^-_\\.]+-[^-_\\.]+-[^-_\\.]+-[^-_\\.]+-)[^-_\\.]+(\\.[^-_\\.]+)
但是替换还是不行!
我怎样才能让它做我想做的事?