java - 如何使用正则表达式替换新行开头的制表符?

标签 java regex

我正在使用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/

相关文章:

python - 忽略正则表达式中文件中间的 xml 标记(带有非捕获组?)

python - 在 Python 正则表达式中转义 [

java - 在 AsyncTask 中维护 TCP 连接

php - 如何正确转义字符串以用于 PHP 中的正则表达式?

java - 将字母数字字符串转换为数字和字符串映射时生成的空映射

python - 如何删除括号内的内容而不删除括号

java - Java String.matches() 中的正则表达式选项

java - 在 web.xml 安全约束中配置异常

java - 当我尝试将 google 地点库添加到我的项目时出现问题

java - CDI 拦截器与 CDI 事件