非平凡的爆炸字符串收集

时间:2018-07-16 08:31:01

标签: string powershell collections explode

我需要一个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

1 个答案:

答案 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"
    }
}