2013-10-09 80 views
0

我正在使用PowerShell腳本將文件解析爲可輕鬆加載到Excel或DB中的不同分隔格式。Powershell中的Escape Tilde替換

我已經得到它主要是想法除了發現和替換字符串「〜S〜|」所有角色應該被視爲文字。

我試過以下無效: 「\〜S \〜\ |」 「〜S〜\ |」 「〜S〜|」 < - 自從|之後,這個就變成了squirish是或正RegEx土地

任何建議將是有幫助的。

+1

該選擇的唯一的元字符是'|'。下面的正則表達式將匹配確切的序列:'〜S〜\ |' –

+0

這在控制檯中可以正常工作,但通過具有多個實例的長字符串的腳本跳過了一些。 – chonerman

回答

5

的regex.escape方法是專爲這種,你不知道哪些字符被視爲特殊(元字符)的情況。

PS> [regex]::escape("~S~|") 
~S~\| 

你可以看到,唯一的元字符是管道符號(例如「|」),而遁法逃脫它爲您(添加在它前面一個反斜槓)。

PS> "this~S~|is~S~|a~S~|dog" -replace [regex]::escape('~S~|') 
thisisadog 
1

你可以試試這個:

$string = "this~S~|is~S~|a~S~|dog" 
$string -replace '~S~\|',' ' 
1

我解決了這個問題。感謝您的所有輸入,所有答案都如您所描述的那樣工作。

爲了讓我得到這個工作在一個非常長的字符串與'查找'值的多個實例我最終不得不建立字符串,因爲它增長。

例如:

$tString = $_ 
$tString = $tString -replace 'Name:', '' 
$tString = $tString -replace 'Id:', '' 
$tString = $tString -replace 'Administrative group:', '' 
$tString = $tString -replace 'Administrative class\(es\):', '' 
$tString = $tString -replace 'Primary group:', '' 
$tString = $tString -replace 'Session group:', '' 
$tString = $tString -replace '~S~([^-]+)\|', '$1|' 
$tString = $tString -replace ';\|', ';' 
return $tString