2013-06-21 48 views
0

有一個簡單的任務,一直在搞亂我,我需要另外幾組眼睛。我確定我錯過了一些簡單的東西。我們有一個包含各種特殊字符的文件目錄,並且我需要刪除這些文件,只保留字母,數字,點(句點)和下劃線字符。我在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]",""} 

當我跑了這一點,我結束了foo12logfoo1bar2logfoobar_log所以我改變了正則表達式包括.[^a-zA-Z_\.0-9]。這並不刪除任何特殊字符。我也試過[^a-zA-Z_\[\]\(\)\.0-9],結果和我逃過一段時期時一樣。

我懷疑有和我的逃生問題\.和正則表達式正在閱讀它作爲通配符。如果那是怎麼回事,我該如何解決它?如果這不是什麼事情,我錯過了什麼?

+0

有你試過'[^ az A-Z_.0-9]'? – ctn

回答

1

因爲「。」意思是「任何東西」,在方括號內使用該特殊字符會很愚蠢。因此,在這種情況下,句號將失去其特殊含義,您不必在它之前使用「\」轉義字符。

此外,值得注意的是:

\ w表示「任何單詞字符」(字母,數字,下劃線)

\ W意味着「任何非文字字符」(雖然這不是。節省時間在這種情況下,由於要過匹配句號)

因此,在這種情況下,正則表達式的你的相關位可能僅僅是:

[^ \ W]

1

你不需要逃避一段字符類中:

[^a-zA-Z_.0-9] 

應該正常工作。如果沒有,那麼PowerShell正則表達式可能會有一些特殊的含義。

相關問題