字符串替换正则表达式

时间:2012-10-11 17:14:36

标签: java regex

所以我正在努力解决这个问题。当我从某个地方拉弦时,决定在每个角色之间添加空格。

我只需要快速正则表达式:

  • 替换没有空格的单个空格
  • 用1个空格替换三个空格(因为" "变为"   "并添加了空格。)

有人可以帮助这个正则表达式吗?我知道如何为单个/多个空格执行此操作,但不能将x个空格转换为1个空格。

4 个答案:

答案 0 :(得分:4)

这有点棘手,但这是一个单一的正则表达式解决方案:

// becomes "test string"
"t e s t   s t r i n g".replaceAll("( )  | ", "$1");

示例:http://ideone.com/O6DSk

这是有效的,因为如果匹配三个空格,其中一个空格将保存在捕获组1中,但如果匹配单个空格,则捕获组1为空。当我们用组的内容替换匹配时,它将把三个空格变成一个并删除单个空格。

答案 1 :(得分:3)

s = s.replaceAll("\\s{3}", " ");  // Replace 3 spaces with one.

我假设您知道要弄清楚,替换没有空间的单个空间。

  • {n}完全匹配n个空格。
  • {0,n}匹配0到n个空格。
  • {4,}匹配4个或更多空格。

要将single space替换为空格而将3 spaces替换为1个空格,可以使用以下正则表达式: -

s = "He llo   World";
s = s.replaceAll("(\\S)\\s{1}(\\S)", "$1$2").replaceAll("\\s{3}", " ");

System.out.println(s);

输出: -

Hello World

此处的订单很重要。因为3 spaces将与第二个正则表达式转换为single space。如果我们在第一个之前使用它,那么最终它将被no-space替换。

(\\S)\\s{1}(\\S) - > \\S是为了确保只替换单个空格。 \\S表示非空格字符。如果你没有它,它将用无空格替换所有空格字符。

答案 2 :(得分:0)

  

替换没有空格的单个空格替换1个空格的三个空格。

这对于正则表达式来说不是一个工作。

毕竟 是正则表达式的工作。

input.replaceAll("(?<=\S) (?=\S)", "").replaceAll(" {3,}", " ");

第一个正则表达式替换所有前面都有非空格的单个空格(look-behind,(?<=\S)),然后是非空格(look-ahead (?=\S))。

另一个正则表达式负责剩余的三重空间(甚至更多)。

答案 3 :(得分:0)

我认为您只需将replaceAll()与您想要的组合一起使用,并采用以下解决方法:

//locate 3 spaces and mark them using some special chars
myString = myString.replaceAll("   ", "@@@"); //use some special combination

//replace single spaces with no spaces
myString = myString.replaceAll(" ", "");

//now replace marked 3 spaces with one space
myString = myString.replaceAll("@@@", " "); //use the same special combination