如何用单个字符串替换字符串中的多个斜杠和反斜杠?

时间:2019-04-29 13:26:07

标签: java regex string replace replaceall

我的目标是用一个“ \”替换所有“ /”和“ \”。

输入:

String path = "H\\\\\\\\\\ello///Wo\\rld\\!////";

输出:

String path = "H\ello\Wo\rld\!\";

问题:

有没有办法在一行中完成全部操作?

我的解决方案(有效!):

  1. 全部更改为相同的字符
  2. 用一个斜杠替换所有“ /”
  3. 将其恢复正常

我了解到我需要正则表达式,并且“ [X] +”将放置所有可能的组合,例如。 “ XXfXfXXXX”到“ XfXfX”。

我正在搜索类似:(伪代码)

path = path.replaceAll("[\\/]+", "\\");

我尝试了一些组合,但是每次都抛出错误。

我的解决方案:

path = path.replace("\\", "/");
path = path.replaceAll("[/]+", "/");

pfad = pfad.replace("/", "\\");

2 个答案:

答案 0 :(得分:4)

请尝试以下模式以匹配斜杠和反斜杠组:(?:\\+|\/+)并将其替换为\\

说明:

(?:...)-非捕获组

\\+-匹配一个或多个\

\/+-匹配一个或多个/

|-交替:右侧或左侧的匹配模式

Demo

或者,您可以使用模式[\/\\]+,该模式匹配\/的一个或多个

Another demo

答案 1 :(得分:1)

使用

.replaceAll("[\\\\/]+", "\\\\")

查看正则表达式图:

enter image description here

[\\/]+模式匹配\/一次或多次。替换模式为\\,因为替换模式中的反斜杠在Java中是 special ,因此它用于转义表示文字$字符的$符号。要匹配文字反斜杠,您需要use four \ in the regex string literal

请参见Java demo online

String path = "H\\\\\\\\\\ello///Wo\\rld\\!////";
System.out.println(path.replaceAll("[\\\\/]+", "\\\\"));
// => H\ello\Wo\rld\!\