Powershell-功能匹配-返回时获得额外的true / false

Nea*_*ers 1 regex powershell hashtable

为什么我要从此函数的结果中提取“ True”或“ False”(当我只想找回邮政编码时):

Function GetZipCodeFromKeyword([String] $keyword)
{
   $pattern = "\d{5}"
   $keyword -match $pattern 
   $returnZipcode = "ERROR" 
   #Write-Host "GetZipCodeFromKeyword RegEx `$Matches.Count=$($Matches.Count)" 
   if ($Matches.Count -gt 0) 
      {
         $returnZipcode = $Matches[0] 
      }

   Write-Host "`$returnZipcode=$returnZipcode"
   return $returnZipcode 
}

cls
$testKeyword = "Somewhere in 77562 Texas "
$zipcode = GetZipCodeFromKeyword $testKeyword 
Write-Host "Zip='$zipcode' from keyword=$testKeyword" 

Write-Host " "
$testKeyword = "Somewhere in Dallas Texas "
$zipcode = GetZipCodeFromKeyword $testKeyword 
Write-Host "Zip='$zipcode' from keyword=$testKeyword" 
Run Code Online (Sandbox Code Playgroud)

运行时间结果:

$returnZipcode=77562
Zip='True 77562' from keyword=Somewhere in 77562 Texas 

$returnZipcode=12345
Zip='False 12345' from keyword=Somewhere in Dallas Texas 
Run Code Online (Sandbox Code Playgroud)

Dun*_*can 5

如果模式匹配,则$keyword -match $pattern返回该行$True$False否则返回。由于您无需对该值做任何其他事情,因此它是从函数输出的。

尝试:

Function GetZipCodeFromKeyword([String] $keyword)
{
   $pattern = "\d{5}"
   $returnZipcode = "ERROR" 
   if ($keyword -match $pattern)
      {
         $returnZipcode = $Matches[0] 
      }

   Write-Host "`$returnZipcode=$returnZipcode"
   return $returnZipcode 
}
Run Code Online (Sandbox Code Playgroud)

无论是用显式写入还是用Write-Output返回,从函数输出的任何值都将成为结果的一部分return,或者隐式地具有输出结果的管道。

如果您不希望管道输出从函数输出,则将其分配给变量。例如

$m = $keyword -match $pattern
Run Code Online (Sandbox Code Playgroud)

或重定向:

$keyword -match $pattern >$null
Run Code Online (Sandbox Code Playgroud)

要么:

$keyword -match $pattern | Out-Null
Run Code Online (Sandbox Code Playgroud)

或将其发送到另一个输出流:

Write-Verbose ($keyword -match $pattern)
Run Code Online (Sandbox Code Playgroud)

这使您可以通过设置来使其范围可见$VerbosePreference='Continue'(或将您的函数放入cmdlet并-Verbose在调用它时使用该标志)。尽管在最后一种情况下,我仍然会先将其分配给变量:

$m = $keyword -match $pattern
Write-Verbose "GetZipCodeFromKeyword RegEx match: $m" 
Run Code Online (Sandbox Code Playgroud)