我需要一个PS函数,该函数将输入字符串并按如下所示生成输出集合:
输入:
$someString = "abcd{efg|hijk|lmn|o}pqrs"
所需的输出:
$someCollection = @("abcdefgpqrs","abcdhijkpqrs","abcdlmnpqrs","abcdopqrs")
注意:输入字符串中最多包含1个{... | ... | ...}表达式;管道的数量是动态的,范围可以是1到20 ish。
当我驱动输入数据时,爆炸字符串的格式不必完全遵循上面的示例;可以是其他任何东西;我在寻找简单性而不是复杂性。
我的问题是,有没有可以立即使用的基于RegExp的解决方案,还是应该从头开始编写函数,分析输入字符串,检测所有{s,| s和} s等?
平台:Windows 7 / Windows Server 2012,PowerShell 5.x
答案 0 :(得分:4)
您可以使用PowerShell 5和regex轻松地做到这一点:
# define a regex pattern with named groups for all three parts of your string
$pattern = '^(?<pre>[^\{]*)\{(?<exp>.*)\}(?<post>[^\}]*)$'
if($someString -match $pattern){
# grab the first and last parts
$prefix = $Matches['pre']
$postfix = $Matches['post']
# explode the middle part
foreach($part in $Matches['exp'] -split '\|'){
# create a new string for each of the exploded middle parts
"$prefix$part$postfix"
}
}