所以我正在努力解决这个问题。当我从某个地方拉弦时,决定在每个角色之间添加空格。
我只需要快速正则表达式:
" "
变为" "
并添加了空格。)有人可以帮助这个正则表达式吗?我知道如何为单个/多个空格执行此操作,但不能将x个空格转换为1个空格。
答案 0 :(得分:4)
这有点棘手,但这是一个单一的正则表达式解决方案:
// becomes "test string"
"t e s t s t r i n g".replaceAll("( ) | ", "$1");
这是有效的,因为如果匹配三个空格,其中一个空格将保存在捕获组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