非平凡的分解字符串到集合
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"
}
}
我需要一个 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"
}
}