尝试使用 PowerShell 从一段文本中提取 6 位数字字符串,但它仅在一种情况下有效。 6 位数字字符串位于 Windows 剪贴板中的一段文本内。在我的代码中,我期望变量 $Matches[0] 是我要查找的 6 位数字,但结果始终为空。如果我取消注释第 2 行,则 $Matches[0] 将始终是第 2 行中的 6 位代码,即 123456,如下所示。但是,如果我注释掉第 2 行,然后从现实世界的示例中复制一段文本,然后重新运行代码,则 $Matches[0] 不是预期的 6 位字符串,它始终为空。我将在下面介绍这两个示例及其输出。不确定我做错了什么。
工作示例:
$Matches[0] = $null
Set-Clipboard -value "Your PIN is 123456."
$PIN = (Get-Clipboard) -match '\d{6}'
# Get-Clipboard
Write-Output $Matches[0]
上面的代码将按照预期输出以下内容:
非工作示例:如果我注释掉第 2 行:
$Matches[0] = $null
# Set-Clipboard -value "Your PIN is 123456."
$PIN = (Get-Clipboard) -match '\d{6}'
# Get-Clipboard
Write-Output $Matches[0]
并将这段文本复制到 Windows 剪贴板中:
Hello,
您的验证码是351370
此代码将在 20 分钟后过期,以确保您的帐户安全。
输出显示空白,而不是预期的 351370:
想法?
PS C:\> Get-Clipboard
Hello,
Your authentication code is 351370
This code will expire in 20 minutes to keep your account secure.
PS C:\> ([regex]'\d{6}').Match((Get-Clipboard)).Value
351370
编辑:抱歉,我至少应该解释一下。当使用正则表达式搜索和匹配字符串中的特定模式时,您可以使用.Match
如果你想要你的图案第一次出现或者.Matches
找到所有的出现。例子:
PS C:\> $re=[regex]"\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"
PS C:\> $re.match('string string string string string
string string string 127.0.0.1 string string
string 192.168.1.1 string string string string
string string string 255.255.255.0 string string
string string string string string string ').value
127.0.0.1
PS C:\> $re.matches('string string string string string
string string string 127.0.0.1 string string
string 192.168.1.1 string string string string
string string string 255.255.255.0 string string
string string string string string string ').value
127.0.0.1
192.168.1.1
255.255.255.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)