powershell 5.1 - 通过用换行符替换每个正则表达式匹配来覆盖文件 myText.txt

powershell 5.1 - overwrite a file myText.txt by replacing every regex match with a newline character

使用 powershell 5.1,为什么我尝试在 myText.txt 的每个正则表达式匹配处插入一个换行符没有像我预期的那样工作?

据我所知,我的正则表达式工作正常,它匹配每 5 个逗号。

不幸的是,代码无法在每次正则表达式匹配时 inject/replace/insert 换行。 由于某种原因,它会在每次 [=59= 时在末尾添加一个换行符] 以下声明:

要对此进行测试,

  1. 给定一个文件,myText.txt, 结尾并且看起来完全像这样:,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,

  2. 运行下面的命令,观察结果

$splitEveryNthComma = ((Get-Content -path .\myText.txt -Raw) -replace "(?<=^((,[^,]*){5} )+),]","`n,") |设置内容路径.\myText.txt

如何更改上面的代码以获得下面的“预期结果”?

myText.txt的预期结果:

,1,2,3,4,5
,6,7,8,9,10
,11,12,13,14,15
,16,17,

myText.txt的实际结果:

,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,
{new line is added to the end. This is the bug im asking about.}

您的正则表达式可以简化

",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17," -replace "((,[^,]*){5})", "``n"

给予

,1,2,3,4,5
,6,7,8,9,10
,11,12,13,14,15
,16,17,

正则表达式 (,[^,]*){5} 捕获第一个/接下来的 5 个逗号(包括它们之后的任何内容)并在其后附加一个换行符。表达式中的括号将其分组为 {5}(上面代码块中的外括号是捕获的内容)