regex - Powershell:无法让正则表达式在多行上工作

标签 regex powershell

我从票证中收到以下形式的注释:

[Employee ID]: 
[First Name]: Test
[Last Name]: User
[Middle Initial]: 
[Email]: 
[Phone]: 
[* Last 4 of SSN]: 1234

我尝试使用以下代码来获取名字(在本例中为“Test”:

    if ($incNotes -match '(^\[First Name\]:)(. * ?$)')
        {
            Write-Host $_.matches.groups[0].value
            Write-Host $_.matches.groups[1].value
        }

但我什么也没得到。有没有一种方法可以仅使用一个长正则表达式模式来获取我需要的信息?每张票上的信息都保持相同的格式。

我如何获取[名字]后面的信息:等等....

最佳答案

你可以使用

if ($incNotes -match '(?m)^\[First Name]: *(\S+)') {
    Write-Host $matches[1] 
}

请参阅regex demo 。如果 : 和名称之间可以有任何类型的水平空白字符,请将空格替换为 [\p{Zs}\t] 或某种 >[\s-[\r\n]]

详细信息:

  • (?m) - 一个 RegexOptions.Multiline 选项,使 ^ 匹配任何行位置的开头,以及 $ 匹配行尾
  • ^ - 行的开头
  • \[名字]: - [名字]: 字符串
  • * - 零个或多个空格
  • (\S+) - 捕获组 1:一个或多个非空白字符(替换为 \S.*\S[^\n\r]* 匹配任何文本直到字符串末尾)。

请注意,-match 是不区分大小写的正则表达式匹配运算符,如果需要区分大小写的行为,请使用 -cmatch。此外,它仅查找第一个匹配项,并且 $matches[1] 返回第 1 组值。

关于regex - Powershell:无法让正则表达式在多行上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72049199/

相关文章:

php - 如果 preg_match 不匹配模式,则取消设置数组?

java - 排除部分字符串的正则表达式

powershell - 如何在没有标签的情况下查询订阅中的所有虚拟机

windows - npm 不会安装 node sass

java - 无法使用正则表达式检索行中的最后一个单词

python - UnicodeDecodeError,python中Snowball stemming算法的ascii处理

用于匹配最简单的 Ruby 正则表达式的 Ruby 正则表达式

bash - 寻找匹配的 `'时出现意外的EOF

powershell - 使用 PowerShell 返回整个 select 语句

json - 使用 Azure powershell Runbook 中的 Invoke-RestMethod 时,底层连接已关闭 : An unexpected error occurred on a receive.