java - 用单斜线 '/./' 替换斜线之间的点,即 '/'

标签 java regex replace

对于这个字符串dirPath,

String dirPath = "c:/create/a/dir/very/deep/inside/../././../../../dir/";

我希望输出字符串看起来像:

"c:/create/a/dir/very/deep/inside/../../../../dir/";

我用过:

dirPath.replaceAll("/[.]/", "/");

但这给了:

c:/create/a/dir/very/deep/inside/.././../../../dir/
                                   ^^^ 

然后,尝试使用另一个 replaceAll 作为:

dirPath.replaceAll("/[.]/", "/").replaceAll("/[.]/", "/");

成功了!

我的问题是为什么一次调用不能达到相同的结果? 如何用最简单的方式实现?

附言另一个对我不起作用的正则表达式:.replaceAll("($|/)[.]/", "$1")

最佳答案

您可以使用先行模式来避免消耗后续匹配所需的斜线:

dirPath.replaceAll("/\\.(?=/)", "")

演示:https://regex101.com/r/qWKVU3/1http://tpcg.io/ijmYJF

关于java - 用单斜线 '/./' 替换斜线之间的点,即 '/',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53219875/

相关文章:

java和python进程在linux上可以独占锁同一个文件

python - 使用 Pandas 解析 JSON - 附加\转义字符的问题

JavaScript 替换是将所有空格替换为非空格

java - map 中的增量值(JAVA)

java - 如何使用Java Streams获取嵌套映射的键的所有组合?

c# - 有没有办法让字符串达到年份值?

java - 如何使用 `regex` 修剪已解析的字符串?

python - 根据条件替换 Pandas Dataframe 中的值

Java替换方法问题

java - 如何从 Gradle 中的 jacoco 插件中排除生成的 sourceSet