非平凡的分解字符串到集合

non-trivial explode string to collection

我需要一个 PS 函数来获取输入字符串并生成输出集合,如下所示:

输入:

$someString = "abcd{efg|hijk|lmn|o}pqrs"

期望的输出:

$someCollection = @("abcdefgpqrs","abcdhijkpqrs","abcdlmnpqrs","abcdopqrs")

注意:输入字符串中最多有 1 个 {...|...|...} 表达式;管道的数量是动态的,可以是 1 到 20 ish 之间的任何值。

在我驱动输入数据时,要分解的字符串的格式不必完全按照上面的例子;它可以是任何其他东西;我正在寻找简单而不是复杂。

我的问题是,有没有我可以立即使用的基于 RegExp 的解决方案,或者我应该从头开始编写函数、分析输入字符串、检测所有 {s、|s 和 } 等等?

平台:Windows 7 / Windows Server 2012,PowerShell 5.x

您可以使用 PowerShell 5 使用正则表达式非常轻松地做到这一点:

# 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"
    }
}