Regex Powershell正则表达式:仅用选项卡替换多个空格

Regex Powershell正则表达式:仅用选项卡替换多个空格,regex,powershell,Regex,Powershell,这是一个类似于C#问题的Powershell问题: 我在一个可变长度的文本文件中有固定宽度的列数据,所以我想用制表符来分隔数据。为此,我希望使用Powershell读取文件,使用正则表达式将多个空格替换为制表符,保持行的结尾完好无损,并将其输出到临时文件。然后我将其重命名为原始名称 我在网上搜索过,似乎只能找到零碎的东西。任何与此相关的帮助都将不胜感激 试试看 gc .\0.txt | % { $_ -replace ' +',"`t" } | set-content

这是一个类似于C#问题的Powershell问题:

我在一个可变长度的文本文件中有固定宽度的列数据,所以我想用制表符来分隔数据。为此,我希望使用Powershell读取文件,使用正则表达式将多个空格替换为制表符,保持行的结尾完好无损,并将其输出到临时文件。然后我将其重命名为原始名称

我在网上搜索过,似乎只能找到零碎的东西。任何与此相关的帮助都将不胜感激

试试看

gc .\0.txt  | 
 % { $_ -replace '  +',"`t" } |   
     set-content .\temp.txt
  • 取内容

    $content = [IO.File]::ReadAllText('foo.txt')
    
  • 用单个选项卡替换至少两个空格:

    $content = $content -replace ' {2,}', "`t"
    
  • 写回文件

    [IO.File]::WriteAllText('footab.txt', $contents)
    

  • @AnsgarWiechers使用2''空格字符编辑;)你是说单个空格会被替换吗?如果是这样,那不是我需要的。数据中有单个空格,每列之间始终有2个或更多空格。谢谢大家!@LawrenceKnowlton不,单个空格没有被替换。酷!我会尽力破译你那里有什么。我知道您正在使用GetContent的别名,但在这之后,语法是ehm taxing lol!谢谢@LawrenceKnowlton
    +
    在正则表达式中表示“前一个表达式一次或多次”。在这种情况下,前面的“表达式”只是一个空格,而这个表达式前面是另一个空格。因此,整个表达式被翻译为“一个空格后接一个或多个空格”(简称“2个或多个空格”)!太快了!另外,$utf8语句添加了什么,在普通ole ASCII文件中是否有必要?再次感谢你!它只是指定输出应该写为UTF-8而不带BOM。我想,如果它只是ASCII码,你可以省略它。事实上,如果没有编码参数,该方法就可以做到这一点,因此在任何情况下都不需要。太棒了!现在,我将把它合并到VBA shell调用中,这样我就不必留下我的Excel宏:)在VBA中执行此操作将需要更多的代码行!再次感谢!我以为它在工作,但footab文件仍然是空的。有什么想法吗?请尝试输入和输出文件的完整路径。