【发布时间】:2013-06-21 20:37:54
【问题描述】:
有一个简单的任务一直困扰着我,我需要另外几双眼睛。我确定我错过了一些简单的东西。我们有一个包含各种特殊字符的文件目录,我需要删除那些只留下字母、数字、点(句点)和下划线字符。我在 PowerShell v2.0 脚本中使用正则表达式。
例如:
!foo12.log 变为 foo12.log
foo1(bar)2.log 变为 foo1bar2.log
[foo]bar_.log 变为 foobar_.log
我的策略是使用和排除列表并将其他所有内容替换为""。考虑:
$bkpPath = "\\Server\foo"
gci $bkpPath | % {$_.name -replace "[^a-zA-z_0-9]",""}
当我运行它时,我最终得到了foo12log、foo1bar2log 和foobar_log,因此我将正则表达式更改为包含.:[^a-zA-Z_\.0-9]。这不会删除 任何 特殊字符。我也尝试过[^a-zA-Z_\[\]\(\)\.0-9],结果与我逃避一段时间时的结果相同。
我怀疑我逃到\. 期间存在问题,并且正则表达式将其读取为通配符。如果这是怎么回事,我该如何解决?如果这不是发生了什么,我错过了什么?
【问题讨论】:
-
你试过
[^a-zA-Z_.0-9]吗?
标签: regex powershell-2.0 regex-negation