我正在使用java尝试将新行开头的四个空格替换为制表符。我想使用正则表达式来做到这一点。我的问题是正则表达式当前正在用一个选项卡替换所有四个空格序列。我希望它为每个四个空格序列插入一个制表符。现在我有:
public String translate(String text) {
text = text.replaceAll("(?m)^( )+", "\t");
return text;
}
最佳答案
您不需要 +
因为您想要正好 4 个空格,并且需要一个后向断言:
text = text.replaceAll("(?m)(?<=^ *) ", "\t");
注意:由于后视需要回溯,这只能用于大约 10K 或更少的输入。对于更大的输入,请使用模式和匹配器等
与其他答案不同,这个答案确实有效(请参阅下面的测试),因为它使用积极的后视 (?<=^ *)
断言输入开头和目标替换之间只有空格,否则您将仅匹配前 4 个空格:
String text = " a\n b \n";
text = text.replaceAll("(?m)(?<=^ *) ", "\t");
System.out.println(text.replace("\t", "TAB"));
输出:
TABTABa
TABTABb
关于java - 如何使用正则表达式替换新行开头的制表符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8440916/