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

PowerShell替换含特殊字符文本行及括号精准处理问题

问题与解决方案

主问题:第三条替换命令失效的原因

你的第三条命令失效核心有两个关键问题:

  1. 匹配字符串里的(、$都是正则特殊字符:(用于分组,$是行尾锚点,必须转义才能当作字面字符匹配(要么手动加\,要么用[regex]::Escape()统一处理整个匹配文本)
  2. 替换字符串里的$0是PowerShell正则替换的特殊变量,代表整个匹配的内容,而非字面的$0;要表示字面的美元符号$,必须写成$$

修正后的命令

推荐用[regex]::Escape()统一处理带特殊字符的匹配文本,同时转义替换字符串里的$:

ls *.txt -rec | %{$f=$_; (gc $f.PSPath) | %{$_ -replace [regex]::Escape(":  Hold'em No Limit ($0.50/$1.00 USD)"), " - Holdem(No Limit) - $$0.50/$$1.00"} | sc $f.PSPath}

也可以手动转义匹配文本里的特殊字符,同时转义替换字符串的$:

ls *.txt -rec | %{$f=$_; (gc $f.PSPath) | %{$_ -replace ":  Hold'em No Limit \(\$0\.50/\$1\.00 USD\)", " - Holdem(No Limit) - $$0.50/$$1.00"} | sc $f.PSPath}

附加问题:移除特定位置的括号(保留金额内容)

可以用正则捕获组精准匹配won (开头、)结尾的金额部分,直接提取括号内的内容完成替换,无需固定数字:

实现命令

ls *.txt -rec | %{$f=$_; (gc $f.PSPath) | %{$_ -replace "won \((\$[\d.]+\))", "won `$1"} | sc $f.PSPath}

正则说明

  • won \(:匹配字面的won (((转义为\(避免被当成正则分组)
  • (\$[\d.]+):捕获组,匹配$开头、后续是数字和小数点的任意金额内容
  • 替换字符串里的$1代表捕获组捕获到的金额,这样就能去掉目标括号,同时保留金额本身

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:05:36