regex - 通过 Powershell 从文本文件中提取字符串
问题描述
我一直在尝试使用 PowerShell 从 .txt 文件中的多行中提取某些值。
Host
Class
INCLUDE vmware:/?filter=Displayname Equal "server01" OR Displayname Equal "server02" OR Displayname Equal "server03 test"
这就是我要的 :
server01
server02
server03 test
到目前为止我有代码:
$Regex = [Regex]::new("(?<=Equal)(.*)(?=OR")
$Match = $Regex.Match($String)
解决方案
您可以使用
[regex]::matches($String, '(?<=Equal\s*")[^"]+')
请参阅正则表达式演示。
在此处查看更多提取多个匹配项的方法。但是,您的主要问题是正则表达式模式。(?<=Equal\s*")[^"]+
模式匹配:
(?<=Equal\s*")
- 一个位置前面有Equal
0+ 个空格,然后是"
[^"]+
- 消耗 1+ 字符而不是双引号。
演示:
$String = "Host`nClass`nINCLUDE vmware:/?filter=Displayname Equal ""server01"" OR Displayname Equal ""server02"" OR Displayname Equal ""server03 test"""
[regex]::matches($String, '(?<=Equal\s*")[^"]+') | Foreach {$_.Value}
输出:
server01
server02
server03 test
这是读取文件、获取所有匹配项并保存到文件的完整片段:
$newfile = 'file.txt'
$file = 'newtext.txt'
$regex = '(?<=Equal\s*")[^"]+'
Get-Content $file |
Select-String $regex -AllMatches |
Select-Object -Expand Matches |
ForEach-Object { $_.Value } |
Set-Content $newfile
推荐阅读
- android - 使用 Fragment 的 Android Jetpack 分页:适配器未收到回调
- excel - 复杂的查找和替换
- linux - Linux Bash 中的一行命令
- sql - 如何选择具有子字符串的行
- python-3.x - tensorflow api 2.0 张量对象仅在启用急切执行时才可迭代。要迭代此张量,请使用 tf.map_fn
- qt - QML滚动区域,列堆叠项目在彼此之上
- .net - 如何在 Catia 中循环遍历 catpart
- javascript - 当列是 JSON 数组而不是字符串时如何过滤 ANTD 表
- c# - .net 4.62 c# 参考总是指向 GAC,即使安装 nuget 包
- html - CSS:空白空间中图像div下的文本