regex - Powershell RegEx 匹配索引始终相同
问题描述
我正在使用以下代码片段在文本文件中搜索多个系统名称并将它们保存在一个数组中。
现在,我需要保存比赛的位置,但总是只获得第一场比赛的位置。
$pattern_sysname = '(?<=Computername).+?($)'
Get-Content $path | Foreach {if ([Regex]::IsMatch($_, $pattern_sysname)) {
$arr_sysname += [Regex]::Match($_, $pattern_sysname)
}
}
$arr_sysname.index
我需要每场比赛的位置。
解决方案
看这个演示:
#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
推荐阅读
- pandas - 如何有条件地更改熊猫数据框中的单元格?
- ruby-on-rails - 使用 Rails 5 ActiveStorage 上传网络摄像头屏幕截图
- asp.net-web-api - 为什么这会返回转义的 JSON 字符串?
- vb.net - 跨类和表单共享变量
- reactjs - 反应破坏状态的方法与使用参数
- emacs - 组织模式投影仪导出:抑制标题幻灯片?
- asp.net-mvc - 引导程序未按预期工作
- .net - WinSCP Session.ScanFingerprint() 的正确语法是什么?
- python - 分发的django项目运行与本地项目不同,得到1366,“Incorrect string value Error
- sql-server - 使用 SQL 中其他列的混合值创建 varchar 列