Regex Powershell正则表达式搜索并附加多个值

Regex Powershell正则表达式搜索并附加多个值,regex,powershell,replace,Regex,Powershell,Replace,下面我有一个ps1用于查找和附加由正则表达式模式定义的文本;i、 e.从[pattern]到[pattern]Foo。除了将每个正则表达式定义为pattern2、pattern3等并创建一个单独的“ForEach”以对应于每个正则表达式之外,对于多个正则表达式模式是否有更简单的方法来实现这一点?因为我就是这样做的,它很有效,但它看起来很初级 $pattern1 = [regex]'([___)' $pattern2 = [regex]'([___)' Get-ChildItem 'C:\\Fi

下面我有一个ps1用于查找和附加由正则表达式模式定义的文本;i、 e.从[pattern]到[pattern]Foo。除了将每个正则表达式定义为pattern2、pattern3等并创建一个单独的“ForEach”以对应于每个正则表达式之外,对于多个正则表达式模式是否有更简单的方法来实现这一点?因为我就是这样做的,它很有效,但它看起来很初级

$pattern1 = [regex]'([___)'
$pattern2 = [regex]'([___)'

Get-ChildItem 'C:\\File\\Location\\*.txt' -Recurse | ForEach {
     (Get-Content $_ | 
     ForEach  { $_ -replace $pattern1, ('$1'+'FOO')} | 
     ForEach  { $_ -replace $pattern2, ('$1'+'FOO')}) |
     Set-Content $_
}

如果要使用相同的替换模式进行替换,只需使用:


注意:在未编排的备选方案中,您应该注意备选方案的顺序:如果较短的分支可以在字符串中的相同位置匹配,则较长的分支(如果在较短的分支之后出现)将不会得到测试。例如,
(在|一|一上)
将只匹配
一上的
。有关这方面的更多信息,请参见。

您可以使用替换:
[regex]'(pattern1 | pattern2)
BTW
[
需要转义
\[
否则这是一个无效的模式。此外,如果您使用的是PowerShell 3或更新版本,请在获取内容中使用
-raw
参数,以加快处理速度。您可以链接
-replace
,例如
获取内容$\u-replace$pattern1,$1FOO'-replace$pattern2,$1FOO'
$pattern = [regex]'(pattern1|pattern2)'