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

使用PowerShell正则表达式提取指定分隔符间的首个匹配内容

PowerShell正则提取目标内容解决方案

正则表达式方案

针对需求,可使用以下正则匹配两种格式的目标内容,同时处理带引号字段内的逗号、转义字符及换行符:

(?<=^|,)(?:"([^"\\]*(?:\\.[^"\\]*)*)"|([^,]+))(?=,|$)

正则说明

  • (?<=^|,):匹配行首或逗号之后的起始位置,确保从目标字段开头开始匹配
  • "([^"\\]*(?:\\.[^"\\]*)*)":匹配被双引号包裹的字段,支持处理转义字符(如\"),捕获引号内的内容到分组1
  • |([^,]+):匹配无引号的逗号分隔字段,捕获内容到分组2
  • (?=,|$):匹配逗号或行尾的结束位置,确保截取到目标字段结尾

PowerShell 实现代码

# 测试输入行
$inputLines = @(
    '"0x00000000","What do you want to eat? fish, meat or\n eggs?",""',
    '"0x00030002","What do you want to eat?",""',
    '0x00030002,What do you want to eat?,'
)

foreach ($line in $inputLines) {
    if ($line -match '(?<=^|,)(?:"([^"\\]*(?:\\.[^"\\]*)*)"|([^,]+))(?=,|$)') {
        # 优先取带引号的分组结果,无则取无引号分组
        $targetContent = $matches[1] ?? $matches[2]
        # 将\n替换为空格并去除首尾空白
        $formattedContent = $targetContent -replace '\\n', ' ' | Trim
        Write-Output $formattedContent
    }
}

原正则问题分析

你之前的正则存在两处关键问题:

  1. 语法错误:\?<= 是错误写法,正向预查的正确格式是 (?<=)
  2. 匹配逻辑缺陷:.* 会贪婪匹配到最后一个逗号/引号,无法正确处理带引号内的逗号,导致匹配结果不符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:57:44