之間提取值我試圖提取2個部分之間的內容在Outlook MSG:的powershell - 在使用正則表達式
部分A:
XXXXXXXXXXXXXX
部分B:
XXXXXXXXXXXXXX
C部分:
我正在使用re gex "(?sm)part A:(.*?)part C:"
。我這樣做是因爲一些味精沒有part B:
。有沒有辦法從輸出中刪除/排除part B:
內容?任何幫助真的很感激,謝謝。
之間提取值我試圖提取2個部分之間的內容在Outlook MSG:的powershell - 在使用正則表達式
部分A:
XXXXXXXXXXXXXX
部分B:
XXXXXXXXXXXXXX
C部分:
我正在使用re gex "(?sm)part A:(.*?)part C:"
。我這樣做是因爲一些味精沒有part B:
。有沒有辦法從輸出中刪除/排除part B:
內容?任何幫助真的很感激,謝謝。
是的,你添加一個單獨的捕獲塊與(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:
tq的內容,但它不起作用,因爲我想 – user3358493
您需要獲得'$ matches [1]'來獲得所需的值。最後,添加示例,可能來自給您提供問題的文件。 – Vesper
謝謝你的答案。我設法解決它使用正則表達式和replace.it可能不整潔,但結果是我所期望的 – user3358493
與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。
您能否顯示您的預期輸出? –
輸出是我標記爲X.thx – user3358493