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

如何删除字符串末尾单词(除非为"money")?PowerShell正则求助

解决方案:保留末尾"money",删除其他末尾单词

问题分析

你需要删除字符串末尾的任意单词,仅当末尾单词是money时保留原字符串。之前尝试的正则'Hellow money' -replace '.*[^money]$'逻辑错误:[^money]是字符集,匹配除m、o、n、e、y外的任意单个字符,结合.*贪婪匹配后,只会留下不符合字符集的单个字符,完全无法实现需求。

有效正则方案

针对PowerShell环境,使用反向否定预查精准匹配末尾非money的单词,替换为空即可:

基础版本(适用于单词仅含字母/数字/下划线)

# 测试示例1:末尾非money,删除单词
"Hello monet" -replace '\b(?!money\b)\w+$', ''
# 输出: "Hello "

# 测试示例2:末尾是money,保留原字符串
"Hello money" -replace '\b(?!money\b)\w+$', ''
# 输出: "Hello money"

# 测试单单词情况
"monet" -replace '\b(?!money\b)\w+$', ''
# 输出: ""

"money" -replace '\b(?!money\b)\w+$', ''
# 输出: "money"

扩展版本(支持含特殊字符的单词,如标点)

如果末尾单词包含非字母数字的特殊字符,将\w+替换为[^ \t\n]+(匹配任意非空白字符序列):

"Hello monet!" -replace '\b(?!money\b)[^ \t\n]+$', ''
# 输出: "Hello "

正则解释

  • \b:单词边界,确保匹配的是完整单词,避免部分匹配(比如不会误删mone)
  • (?!money\b):反向否定预查,检查接下来的单词不是money(\b确保是完整的money单词)
  • \w+/[^ \t\n]+:匹配目标单词(前者仅支持字母数字下划线,后者支持所有非空白字符)
  • $:锚定到字符串末尾,确保只匹配最后一个单词

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:34:57