2012-12-23 57 views
0

我必須從該行提取用戶信息獲取子PowerShell中,使用正則表達式和特殊字符

"user/data ^`ms\john ^`Lorem Ipsum Lorem ^`Lorem Ipsum Lorem" 

的模式是,信息總是"user/data ^「和"^」之間

預期結果是 「MS \約翰」

這是我的嘗試,

$line = "user/data ^`ms\john ^`Lorem Ipsum Lorem ^`Lorem Ipsum Lorem" 
if ($line -match "user/data(.*)") 
{ 
    write-host "found: $($matches[1])" 
} else { 
    Write-Host "no found" 
} 

我不知道如何在正則表達式中添加特殊字符並提取「ms \ john」。

歡迎任何評論。

回答

1

兩個更多的選擇:

PS> $il = "user/data ^`ms\john ^`Lorem Ipsum Lorem ^`Lorem Ipsum Lorem" 

PS> $il -replace '^user/data\ \^`([^\^]+)\ \^.+$','$1' 
ms\john 

PS> [regex]::Matches($il,'user/data\s\^`([^\^]+)\s\^').Groups[1].Value 
ms\john 
+0

它工作正常,但如果我嘗試從文本文件中讀取相同的行,我會得到「ms \ john」。注意狂野口音或倒影。 +1 – m0dest0

+0

你說得對,我已經更新了模式,給它一個鏡頭。 –

+0

它的工作,謝謝Shay.Can你請解釋爲什麼前一個沒有工作。 – m0dest0

1

試試這個:

$line = "user/data ^`ms\john ^`Lorem Ipsum Lorem ^`Lorem Ipsum Lorem" 
if ($line -match "(?<=\^)(.[^\^]*)") 
{ 
    write-host "found: $($matches[1])" 
} else { 
    Write-Host "no found" 
} 
+0

+1,由於基督教。正如我聲明的那樣,正則表達式工作正常,但是如果我嘗試從文本文件中讀取同一行,則會在捕獲的字符串的開始處添加狂野口音,就像文本文件正在添加一個額外字符一樣。 – m0dest0

2

你也可以試試這個:

$line = "user/data ^`ms\john ^`Lorem Ipsum Lorem ^`Lorem Ipsum Lorem" 
if ($line -match "user/data\s+\^`?([^\^]+)") 
{ 
    write-host "found: $($matches[1])" 
} else { 
    Write-Host "no found" 
} 
+0

+ 1,正則表達式工作正常,但如果我嘗試從文本行讀取行,然後添加反引號,任何線索?謝謝, – m0dest0