2013-05-08 49 views
11

我試圖用吐一個分隔符,這是一個字符串,字符串分割字符串:如何通過串在PowerShell中

$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0" 
$separator = "<<>>" 
$string.Split($separator) 

由於分裂的結果我得到:

5637144576, messag 

est 



5637145326, 1 



5637145328, 0 

取而代之的

5637144576, messag<>est 
5637145326, 1 
5637145328, 0 

當我嘗試使用重載的分裂,它接受的String []:

$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0" 
$separator = @("<<>>") 
$string.Split($separator) 

,但我得到一個錯誤:

Cannot convert argument "0", with value: "System.Object[]", for "Split" to type "System.Char[]": "Cannot convert value "<<>>" to type "System.Char". Error: "String must be exactly one character long."" 

是否有人知道如何通過字符串分割字符串?

+0

爲什麼分隔符'<<>>'沿'<>'分開? – 2013-05-08 07:46:18

+0

爲什麼要將分隔符<<>>沿<>分開? - 這是我遇到並試圖解決的一個問題 – Ievgen 2013-05-08 07:48:14

+0

是你想沿着_'<<>>'的某個字符分割嗎? – 2013-05-08 07:49:54

回答

15

-split操作員使用的字符串分割,而不是像Split()一個chararray:

$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0" 
$separator = "<<>>" 
$string -split $separator 

5637144576, messag<>est 
5637145326, 1 
5637145328, 0 

如果你想使用Split()方法有一個字符串,你需要$seperator是一個元素的字符串數組,並指定一個stringsplitoptions值。您可以通過檢查其定義看到這一點:

$string.Split 

OverloadDefinitions                     
-------------------                     
string[] Split(Params char[] separator)                
string[] Split(char[] separator, int count)               
string[] Split(char[] separator, System.StringSplitOptions options)         
string[] Split(char[] separator, int count, System.StringSplitOptions options)      

#This one 
string[] Split(string[] separator, System.StringSplitOptions options)  
string[] Split(string[] separator, int count, System.StringSplitOptions options) 


$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0" 
$separator = [string[]]@("<<>>") 
$string.Split($separator, [System.StringSplitOptions]::RemoveEmptyEntries) 

5637144576, messag<>est 
5637145326, 1 
5637145328, 0 

編輯:由於@RomanKuzmin指出,使用正則表達式圖案默認-split分裂。所以要注意轉義特殊字符(例如.,在正則表達式中是「任何字符」)。你也可以強制simplematch禁用正則表達式匹配,如:

$separator = "<<>>" 
$string -split $separator, 0, "simplematch" 

瞭解更多關於-splithere

+0

'est'應該保留。他似乎想分割任何字符'<<>>'(也就是沿'<' and '>') – 2013-05-08 07:57:08

+0

sry,沒有看到你想要的輸出樣本中的est ^^看到更新的答案 – 2013-05-08 08:00:42

+0

你知道嗎,是可能只返回不空字符串? – Ievgen 2013-05-08 08:02:35

1

當使用Split方法時,可以使用split運算符。所以,你的代碼將是這樣的:

$string -split '<<>>' 
0

下應該是你需要的東西:

$string -Split $separator 

這將產生:

5637144576, messag<>est 
5637145326, 1 
5637145328, 0 
0

有時PowerShell的長相酷似C#和別人,那麼你知道...

它也可以這樣使用:

# A dummy text file 
$text = @' 
abc=3135066977,8701416400 

def=8763026853,6433607660 

xyz=3135066977,9878763344 
'@ -split [Environment]::NewLine,[StringSplitOptions]"RemoveEmptyEntries" 

"`nBefore `n------`n" 

$text 

"`nAfter `n-----`n" 

# Do whatever with this 
foreach ($line in $text) 
{ 
    $line.Replace("3135066977","6660985845") 
}