gpt4 book ai didi

regex - 使用正则表达式提取字符串可检索 'True 111499'

转载 作者:行者123 更新时间:2023-12-03 01:04:50 25 4
gpt4 key购买 nike

我有一个函数,该函数应该在文本文件中检索修订号。文本文件如下所示:

componentname1:123456
componentname2:234567

第二部分是一个数字,代表Subversion修订版本号。 powershell脚本逐行读取此文件,然后使用此功能处理每一行:
function getRevision($line) {
$line -match ":(?<revision>[0-9]*)"
$result = $Matches['revision']
Write-Host "Found component revision '$($result)'"
return $result
}

处理函数 getRevision时,它将给出输出
Found component revision '111499'

该函数由另一个函数调用,如下所示:
$rev = getRevision($Line)
# ....
someOtherFunction -Revision "$($rev)"

在这个 someOtherFunction中,我现在得到以下输出:
Handle component with revision 'True 111499'

编辑
我添加了函数 someOtherFunction的基本代码:
function someOtherFunction {

param(
[Parameter(Mandatory=$True)]
[String]$Revision
)

Write-Host "Handle component with revision '$($Revision)'"
}

现在,问题出现了:为什么会有 True的东西?我的错误在哪里?

最佳答案

关键字True来自函数第一行中的-match运算符

$line -match ":(?<revision>[0-9]*)"

如果在函数内部执行了 -match,则其输出(二进制值)会自动添加到函数的输出中,然后 $result将作为第二个元素添加。因此,如果您检查 $rev的值,则会看到:
PowerShell> $rev
True
123456

如果要摆脱第一个元素,只需要将其通过管道传递给 Out-Null:
$line -match ":(?<revision>[0-9]*)" | Out-Null

编辑:如Matt所指出的,如果 $line与模式不匹配,则它可能返回意外结果(最后一次成功匹配)。为了防止这种情况,您可以使用:
if ($line -match ":(?<revision>[0-9]*)") {
$result = $Matches['revision']
Write-Host "Found component revision '$($result)'"
return $result}
else {return $false}

在这种情况下,不需要 Out-Null,因为没有将 -match条件内的 if添加到输出中。

关于regex - 使用正则表达式提取字符串可检索 'True 111499',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50907234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com