嗨,我有一段代码,其中我需要删除数组中存在的值,但是这需要使用正则表达式来完成,如果有人可以帮助我,那我将无法完成。有帮助。
下面是代码块:
$arr = @("Abd","xyz")
imports: [
ddd,
xxx,
yyy,
Abd,
fff,
xyz,
zzz,
nnn,
],
我想完成的是,应删除数组中存在的所有值,这些值应在“ imports:[”和“]的第一个实例”之间
我想类似的事情可能对您有用:
对于演示,我使用的是Here-String,但在现实生活中,您希望使用以下命令从文件中加载它:>
$txt = Get-Content -Path 'X:\input.txt' -Raw # read as single string
该代码使用正则表达式来获取部件between
'imports: ['
和']'
。然后,它将行分开,并从变量$block
中的数组中获取与任何内容都不匹配的行数组。完成此操作后,将在$ matches [1]中找到并保存在变量$toReplace
中的原始textblok替换为这些过滤的行(与换行符重新连接)。$txt = @" imports: [ ddd, xxx, yyy, Abd, fff, xyz, zzz, nnn, ], "@ $arr = "Abd","xyz" # join the values from the array with the regex OR operator `|` $remove = ($arr | ForEach-Object { [regex]::Escape($_) }) -join '|' # test if we can find the block of text between 'imports: [' and '],' $txt = if ($txt -match 'imports: \[([^]]+)') { $toReplace = $matches[1] $block = $toReplace -split '\r?\n' | Where-Object { $_ -notmatch $remove } $txt.Replace($toReplace, ($block -join [Environment]::NewLine)) } # output on screen $txt # output back to file $txt | Set-Content -Path 'X:\output.txt'
输出将是
进口:[dddxxx,yyy,fff,zzz,nnn,],正则表达式详细信息:
imports:\从字面上匹配字符串“ imports:”(不区分大小写)\ [从字面上匹配字符“ [”(匹配下面的正则表达式,并将其匹配捕获到反向引用编号1中[^]]匹配非“]”的任何字符+一次至无限次,尽可能多次,并根据需要进行回馈(贪婪))