2015-06-23 57 views
0

之間提取值我試圖提取2個部分之間的內容在Outlook MSG:的powershell - 在使用正則表達式

部分A:

XXXXXXXXXXXXXX

部分B:

XXXXXXXXXXXXXX

C部分:

我正在使用re gex "(?sm)part A:(.*?)part C:"。我這樣做是因爲一些味精沒有part B:。有沒有辦法從輸出中刪除/排除part B:內容?任何幫助真的很感激,謝謝。

+0

您能否顯示您的預期輸出? –

+0

輸出是我標記爲X.thx – user3358493

回答

0

是的,你添加一個單獨的捕獲塊與(Part B: .*?)?之後你想捕獲。如果您的信息有「B部分」,此塊將只有數據。

PS K:\> $t="Part A: blabla Part B: bla Part C: bla" 
PS K:\> $regex="(?ms)Part A: (.*?)(Part B:.*?)?Part C:" 
PS K:\> $t -match $regex 
True 
PS K:\> $matches 

Name       Value 
----       ----- 
2        Part B: bla 
1        blabla 
0        Part A: blabla Part B: bla Part C: 


PS K:\> $tt="bla Part A: no wai Part C: here" 
PS K:\> $tt -match $regex 
True 
PS K:\> $matches 

Name       Value 
----       ----- 
1        no wai 
0        Part A: no wai Part C: 
+0

tq的內容,但它不起作用,因爲我想 – user3358493

+0

您需要獲得'$ matches [1]'來獲得所需的值。最後,添加示例,可能來自給您提供問題的文件。 – Vesper

+0

謝謝你的答案。我設法解決它使用正則表達式和replace.it可能不整潔,但結果是我所期望的 – user3358493

0

與Vespers類似的回答。我也會使用$matches,因爲你正在尋找提取兩個部分。我將使用named matches和稍微不同的正則表達式模式。

$pattern = "(?sm)part A:(?<betweenAB>.*?)\s+part B:(?<betweenBC>.*?)part C:" 
If($msg -match $pattern){ 
    "{0}{1}" -f $matches.betweenAB, $matches.betweenBC 
} 

$msg會包含您的郵件內容或者你可以到位$msg.Body如果您使用的是Outlook的COM對象。 ?<capturename>是您如何使用命名匹配的方式,以便您可以引用$matches對象中的匹配屬性。我還在\s+中刪除了一個應該在示例文本中跳過的換行符。

您還可以看到這裏使用的-f format operator