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

PowerShell正则表达式匹配含$符号行的问题求助

解决方案

核心要点

  1. 输入字符串用单引号包裹:避免PowerShell将$解析为变量,保留原始字符串中的$字面量。
  2. 正则捕获分组:用三个分组分别捕获名字、找到的内容、地点,替换时按目标格式重组。
  3. 替换字符串用单引号:防止PowerShell解析替换字符串中的$为变量引用。

具体代码示例

# 测试用例1
'Julie found "NoMoney" in "Easter Island"' -replace '^(\w+) found (.+?) in (.+)$', '$1($3) = $2'
# 输出: Julie("Easter Island") = "NoMoney"

# 测试用例2
'John found $SomeMoney$ in "Greenland"' -replace '^(\w+) found (.+?) in (.+)$', '$1($3) = $2'
# 输出: John("Greenland") = $SomeMoney$

# 测试用例3
'Jimmy found $$LotsOfMoney in "Treasure Island"' -replace '^(\w+) found (.+?) in (.+)$', '$1($3) = $2'
# 输出: Jimmy("Treasure Island") = $$LotsOfMoney

# 测试用例4
'Judy found $5 in Tribeca.NY' -replace '^(\w+) found (.+?) in (.+)$', '$1($3) = $2'
# 输出: Judy(Tribeca.NY) = $5

若必须使用双引号输入字符串

如果因为某些原因需要用双引号定义输入字符串,需用PowerShell的转义符`(反引号)转义$和双引号:

"John found `$SomeMoney`$ in `"Greenland`"" -replace '^(\w+) found (.+?) in (.+)$', '$1($3) = $2'

正则模式说明

  • ^(\w+):匹配开头的名字(字母数字下划线,符合示例中的名字格式)。
  • found (.+?) in:非贪婪匹配found 和 in之间的所有内容(即找到的钱/内容),确保不会过度匹配到后面的内容。
  • (.+)$:匹配 in之后到行尾的所有内容(即地点)。

替换字符串说明

  • $1:引用第一个分组捕获的名字。
  • $3:引用第三个分组捕获的地点。
  • $2:引用第二个分组捕获的内容,保留原始的$符号,因为正则替换引擎会直接输出分组内容的字面量。

内容的提问来源于stack exchange,提问作者Harjit S. Batra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:39:56