【问题标题】:PowerShell Replace with WildcardPowerShell 替换为通配符
【发布时间】:2015-05-07 15:58:06
【问题描述】:

我已经在几个领域进行了一些挖掘,并且已经为此在我的办公桌上猛烈抨击了几个小时,并且开始认为我想多了。希望这是一个非常简单的答案。

最终,我需要做的就是将字符串中的“(*)”替换为“”,但我不知道该怎么做。我读过很多关于正则表达式的东西,但它只是没有意义。

我想做什么的例子

#create a test string
$string = "test 001 (testing 123)"
#replace everything in () with ""
$string.Replace("(*)","")

结果:$string 等于“test 001”

我怀疑这对外面的人来说是儿戏,所以我希望有人遇到这个问题并能够很快回答。提前致谢。

【问题讨论】:

  • 毕竟,我让它像这样工作。不知道它是否是犹太洁食,但它应该可以完成工作。 [regex]::replace($temp,'\(.*\)', '')

标签: regex string powershell replace wildcard


【解决方案1】:

由于括号是正则表达式元字符,您需要对其进行转义以匹配文字括号。

\([^)]*\)

使用上述正则表达式,然后将匹配项替换为空字符串。必要时再转义一次反斜杠。

[^)]* 否定字符类匹配任何字符但不匹配),零次或多次。

DEMO

【讨论】:

  • 我花了一分钟的时间阅读和重新阅读您的解决方案,以弄清楚您到底在做什么。我最终用 .* 完成了它,因为我不会遇到括号内有括号的情况。感谢您的回复。我有一个特定于 PowerShell 的新问题和改进问题,您可能知道如何回答。如何在忽略通配符的情况下用通配符替换?例如,我想将 (2015) 替换为 [2015],但希望它适用于具有模式 (20%%) 的任何日期。我知道如何匹配模式,我正在使用 (20..)。但是(1/2)
  • 当我尝试执行替换时,我无法替换通配符。知道如何将掩码应用于替换字符串吗?这是我想出的,不起作用[regex]::replace($test,'\(20..\)', '[20..]')
  • 或者,如果我们可以从前面排除这些模式:(20..) & (of ..)
  • 正则表达式 \((20..)\),替换字符串 [$1] 。你也可以使用\1 而不是$1
  • 我最终使用了一些狡猾的 if/then/while 魔法。足以完成工作。感谢您之前帮助我。
猜你喜欢
  • 2016-10-06
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 2011-09-09
  • 2015-08-24
相关资源
最近更新 更多