首页 > 解决方案 > Powershell RegEx 匹配索引始终相同

问题描述

我正在使用以下代码片段在文本文件中搜索多个系统名称并将它们保存在一个数组中。
现在,我需要保存比赛的位置,但总是只获得第一场比赛的位置。

$pattern_sysname = '(?<=Computername).+?($)'
Get-Content $path | Foreach {if ([Regex]::IsMatch($_, $pattern_sysname)) {

           $arr_sysname += [Regex]::Match($_, $pattern_sysname)

        }

            }

           $arr_sysname.index

我需要每场比赛的位置。

标签: regexpowershell

解决方案


看这个演示:

#demo data
@'
Computername12
This is Computername1
ComputernameABC
NotMatched
'@ | out-file regex.test

$pattern_sysname = '(?<=Computername).+?$'

Select-String -Path regex.test -Pattern $pattern_sysname -AllMatches |
  select LineNumber,@{N='OffsetInLine';E={$_.Matches[0].Index}}

结果:

LineNumber OffsetInLine
---------- ------------
         1           12
         2           20
         3           12

推荐阅读