簡體   English   中英

powershell-使用正則表達式之間提取值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM