来自单个长字符串的多行正则表达式

问题描述 投票:0回答:1

这是在 Powershell 7.x 中,但我相信这是一个一般的正则表达式问题。

我将一封电子邮件的标题放在一个长字符串中,并希望使用正则表达式通过 Powershell split 函数捕获它们以获得我需要的内容。

看起来像这样:

X-MS-Exchange-Organization-InternalOrgSender: False
Received: from YQBPR0101CA0152.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:e::25)
 by YQBPR0101MB5927.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:36::19) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.27; Tue, 8 Aug
 2023 03:59:56 +0000
Received: from YQBCAN01FT026.eop-CAN01.prod.protection.outlook.com
 (2603:10b6:c01:e:cafe::70) by YQBPR0101CA0152.outlook.office365.com
 (2603:10b6:c01:e::25) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.27 via Frontend
 Transport; Tue, 8 Aug 2023 03:59:56 +0000

所以我希望以单词字符 '(?m)(^\w+)' 开头的每一行都能为我得到。但我也想要之后的一切,直到下一个 ^\w+。我想用 \w+ 捕获的每条额外行都以空格开头,后跟非空格。我认为其中一种环视可能在这里有用,但我似乎无法理解。有什么想法吗?

两个对我来说失败的正则表达式:

'(?sm)(^\w.*(\n\s+.*)+)'
'(?m)(^\w.*(?=(\n\s+.*)*))'
regex powershell multiline
1个回答
0
投票

你可以使用

(?m)^(\w.*(?:\n[\s-[\n]].*)*)

详情

  • (?m)
    - 多行修饰符
  • ^
    - 任意行的开头
  • (\w.*(?:\n[\s-[\n]].*)*)
    - 捕获组#1:
    • \w.*
      - 一个单词字符,然后是除换行字符之外的任何零个或多个字符(尽可能多)
    • (?:\n[\s-[\n]].*)*
      - 零次或多次重复换行字符,然后是除换行符之外的任何空格,然后是除换行符之外的任何零个或多个字符(尽可能多)。

请参阅 正则表达式演示

© www.soinside.com 2019 - 2024. All rights reserved.