我有一个CSV文件,其中包含地址信息,该信息有时在字段中具有换行符。这导致我们的软件将其视为包含无效数据的两行。我的最终目标是创建一个可以从终端运行的单行Powershell命令来解决此问题,但是,当我将捕获组引入方程式时,我无法终生“替换”以使其正常工作。
这是带有行尾的数据文件,可以用“ \ r \ n”捕获:
"name1","address1","city1","state1","zip1"
"name2","address2
2ndline2","city2","state2","zip2"
这是我到目前为止的内容(尚未采用1行cmd行格式):
((get-content "$local\$file" -raw) -replace '(?sm),"[^"]*(?<line>\r\n)[^"]*",', '''${line}<replace>''') `
-replace "<replace>","" | Set-Content "$local\test2.txt"
我遇到了一些问题,他们想出了如何不使用任何内容替换捕获组的方法,因此我试图用另一个可以轻松删除的字符串替换它。当我运行以上命令时,它将替换整个匹配项,而不仅仅是捕获组。我根据此处的另一条建议创建了这一行代码:https://stackoverflow.com/a/29973460/6477292
答案 0 :(得分:2)
如果您具有 PowerShell Core v6.1 和更高版本,则可以使用
(get-content "$local\$file" -raw) -replace ',"[^"\r\n]*\r\n[^"]*",', { $_.Value.Replace("`r`n", "") }
,"[^"\r\n]*\r\n[^"]*",
的正则表达式匹配,"
,然后匹配"
,CR和LF之外的任何0+字符,然后是CRLF序列,然后匹配{{1}之外的任何0+字符。 },然后是"
。
,
r { $_.Value.Replace("
块获取match对象,并将CRLF序列替换为空字符串。
在替换n", "") }
命令时不支持可调用块的其他版本中,只能通过显式使用-replace
对象来做到这一点:
[regex]