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