[英]powershell - extract value in between using regex
我試圖提取Outlook MSG中2個部分之間的內容:
A部分:
XXXXXXXXXXXXXX
B部分:
XXXXXXXXXXXXXX
C部分:
我正在使用正則表達式"(?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:
類似於Vespers的答案。 由於您要提取兩個部分,因此我也將使用$matches
。 我將使用命名匹配和略有不同的正則表達式模式。
$pattern = "(?sm)part A:(?<betweenAB>.*?)\s+part B:(?<betweenBC>.*?)part C:"
If($msg -match $pattern){
"{0}{1}" -f $matches.betweenAB, $matches.betweenBC
}
$msg
將包含郵件的內容,或者如果您使用的是Outlook com對象,則可以將$msg.Body
放置在適當的位置。 ?<capturename>
是使用命名匹配項的方式,因此您可以在$matches
對象中引用匹配屬性。 我還輸入\\s+
來刪除示例文本中應跳過的換行符之一。
您還可以在此處使用-f格式運算符 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.