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

PowerShell正则提取:获取每行首个=后内容及无=整行

Windows PowerShell正则表达式提取解决方案

需求说明

  • 对包含=的行,提取首个=之后的所有内容(即便后续还有=也完整保留)
  • 对不包含=的行,直接提取整行内容

示例输入

ErrorMoving=You cannot=another.
ErrorTooMuchActions
=Too many changes=.{k}=12=aa
WorldErrorWait=An error has occurred.

期望输出

You cannot=another.
ErrorTooMuchActions
Too many changes=.{k}=12=aa
An error has occurred.

问题分析

你之前使用的正则(?<=\+?=).*存在两个问题:

  1. 多余的\+?匹配逻辑,这里不需要匹配+符号,属于无效规则
  2. 该正则仅能匹配包含=的行,不含=的行无法匹配到内容,最终输出空行

正确实现方案

正则表达式

使用以下正则可同时适配两种场景:

^[^=]*(?:=(.*))?$

规则解释

  • ^[^=]*:匹配行首到第一个=之前的所有内容(无=时则匹配整行)
  • (?:=(.*))?:非捕获组,匹配首个=及其后续全部内容,?标记该组为可选(对应无=的行)
  • 最终提取分组1的内容;若分组1为空(即无=的行),则直接使用原行内容

PowerShell命令示例

若处理本地文本文件input.txt并输出到output.txt,可使用以下命令:

Get-Content input.txt | ForEach-Object {
    if ($_ -match '^[^=]*(?:=(.*))?$') {
        $matches[1] ?? $_
    }
} | Set-Content output.txt

或者更简洁的替换写法:

(Get-Content input.txt) -replace '^[^=]*=(.*)$|^([^=]+)$', '$1$2' | Set-Content output.txt

该替换逻辑:

  • 匹配含=的行:^[^=]*=(.*)$,替换为分组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 07:42:05