You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中移除非指定开头行换行符的正则失效问题

修复CSV中的错误换行(PowerShell实现)

问题说明

我有一个大型CSV文件,部分行存在错误换行,导入Excel后需要手动修正数百行。Notepad++里能用正则表达式移除非以;开头行的换行符,但这个逻辑在PowerShell脚本里跑不通。

输入示例

;BP;7165378;XX_RAW;200SSS952;EU-PL;PL02;PL02;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15:00:00;;;;Jhon Name;;;;;;;;9444253;;;;;;;;;;;;;"Jhon Name";;;;;;;;;;;Jhon Name;;;;;;;;Final Check Approved;;;;;;;;;09.01.2023;;;;;Approve;;;;;;12077;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

预期结果

;BP;7165378;XX_RAW;200SSS952;EU-PL;PL02;PL02;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15:00:00;;;;Jhon Name;;;;;;;;9444253;;;;;;;;;;;;;"Jhon Name";;;;;;;;;;;Jhon Name;;;;;;;;Final Check Approved;;;;;;;;;09.01.2023;;;;;Approve;;;;;;12077;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

当前代码问题

原来的代码有两个关键错误:

$content = Get-Content -path "C:\Users\TUF17\Desktop\File\Fix\xx_fix_temp.csv" 
$content -Replace '"\R(?!;)"', ' ' |  Out-File "C:\Users\TUF17\Desktop\File\Fix\xx_noenters.csv" 
  1. 未读取完整文件内容:Get-Content默认按行拆分字符串数组,换行符被剥离,根本没法匹配跨行的换行场景。
  2. 正则表达式错误:多了不必要的引号,逻辑也不对——我们要匹配的是「换行符后不跟;」的情况,不是带引号的换行。

修正后的代码

# 用-Raw参数读取整个文件,保留所有换行符
$content = Get-Content -Path "C:\Users\TUF17\Desktop\File\Fix\xx_fix_temp.csv" -Raw
# 匹配所有换行符,且换行后不是以;开头的,将换行替换为空(如果需要空格分隔,把''改成' '即可)
$fixedContent = $content -replace '\R(?!;)', ''
# 输出到新文件,指定UTF-8编码避免乱码
$fixedContent | Out-File -Path "C:\Users\TUF17\Desktop\File\Fix\xx_noenters.csv" -Encoding UTF8

逻辑说明

  • -Raw参数:让PowerShell读取整个文件为单个字符串,保留原始的换行符(\r\n或\n),这样正则才能跨行匹配。
  • 正则\R(?!;):\R匹配任意换行符序列,(?!;)是负前瞻断言,确保换行符后面的字符不是;,符合「非以;开头的行需要合并到上一行」的需求。

内容的提问来源于stack exchange,提问作者majan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:17