Java:RegExp制表符在行首不起作用

Java:RegExp制表符在行首不起作用,java,regex,csv,Java,Regex,Csv,我正在把一些文件解析到我的Java程序中。由于它的非csv/tsv特性,我想事先格式化它,这样我就可以轻松地阅读它。为此,我尝试了正则表达式,它对我来说很好,只有一个例外:行的开始 我的文件在每一行的开头仍然有一个选项卡,我想去掉它,这样csv解析器就可以正确地解析它们: ^=仅当行中第一个时,\t=选项卡 String content = new String(Files.readAllBytes(path), charset); content = content.replaceAll("^

我正在把一些文件解析到我的Java程序中。由于它的非csv/tsv特性,我想事先格式化它,这样我就可以轻松地阅读它。为此,我尝试了正则表达式,它对我来说很好,只有一个例外:行的开始

我的文件在每一行的开头仍然有一个选项卡,我想去掉它,这样csv解析器就可以正确地解析它们:

^
=仅当行中第一个时,
\t
=选项卡

String content = new String(Files.readAllBytes(path), charset);
content = content.replaceAll("^\t","");
Files.write(path, content.getBytes(charset));
奇怪的是,如果我把我的文件和上面的regExp放入,它会很好地标记要删除的选项卡。我进入调试器,但也找不到错误,即使在彻底搜索之后。我向两位经验丰富的Java程序员展示了代码,以降低问题完全无关紧要的可能性

我在这个网站和其他网站上搜索了一些例子,用空字符串替换也可以。此外,它在我档案中的其他地方也有用。只是不在行的开头。要删除每行开头的空白(空格/制表符),请使用
多行标记:

content = content.replaceAll("(?m)^\\s+","");`

^\t
多行
修饰符一起使用

str.replace("(?m)^\t", "");

对于这类事情,您不需要正则表达式,您可以利用
String.Trim()
方法

阅读中的行,并使用以下代码:

try (BufferedReader br = new BufferedReader(new FileReader(file))) {
   String line;
   while ((line = br.readLine()) != null) {
      line = lines.trim();
      // Then, write to another file stream
   }
}

请参见图中所示的
trim()

@最后一个注意事项,它只会修剪整个文件的开头和结尾。@Jakob,行的开头和制表符之间可能有一个隐藏的空格。您可能应该使用
模式
/
匹配器
习惯用法并调试是否找到任何东西。如果没有,您可以在
模式的行首和制表符之间添加一个通配符,将其分组,并将后面的引用打印为unicode代码点。也可以编辑关键答案。如果您已经看到第一个选项卡被替换,您可能会完全回答您的问题。@Mena-啊,我的错。。他正在同时阅读所有的东西。。所以你。。多行模式会有用的,真不敢相信我忘了那个+1我很快会测试这个,必须在其他atm上工作。到目前为止已经谢谢你了!至少你的想法对我来说是新的,所以我会投票表决。(好吧,我撒谎了,我还不能投票)效果很好,非常感谢!@karthik manchala也是一样,答案也是一样的。Ok看起来是合法的,但我并没有把所有代码都复制到这个问题上。尽管.trim()更适合我直接询问的问题,但我还是在下面几行中做了一些需要regexp的事情。谢谢,谢谢你的帮助,我也不知道修剪。