Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用基于表达式的“列”进行Powershell字符串排序_Powershell_Sorting - Fatal编程技术网

使用基于表达式的“列”进行Powershell字符串排序

使用基于表达式的“列”进行Powershell字符串排序,powershell,sorting,Powershell,Sorting,假设我有一个这样的字符串集合,没有特定的顺序: "Filename (Text) (Comment)" "Filename (Word) (1)" "Filename (Word) (1) (Bad)" "Filename (Text) (2)" "Filename (Picture)" "Filename (Misc)" "Filename (Misc) (1)" "Filename (Picture) (1)" "Filename (Audio)" "Filename (Audio) (Co

假设我有一个这样的字符串集合,没有特定的顺序:

"Filename (Text) (Comment)"
"Filename (Word) (1)"
"Filename (Word) (1) (Bad)"
"Filename (Text) (2)"
"Filename (Picture)"
"Filename (Misc)"
"Filename (Misc) (1)"
"Filename (Picture) (1)"
"Filename (Audio)"
"Filename (Audio) (Comment) (1)"
我想把它们分类如下:

"Filename (Text) (2)"
"Filename (Word) (1)"
"Filename (Text) (Comment)"
"Filename (Audio) (Comment) (1)"
"Filename (Audio)"
"Filename (Picture) (1)"
"Filename (Picture)"
"Filename (Misc) (1)"
"Filename (Misc)"
"Filename (Word) (1) (Bad)"
换句话说,我想按如下顺序排序:从最下面的文本/单词、音频、图片到最上面的Bad,然后按2,1[空白]排序

请注意,我希望文本和单词聚集在一起,然后根据括号中的数字进行排序,我不关心与这些数字不匹配的任何内容,因此我不关心注释

目前我得到的是:

"Filename (Word) (1)"
"Filename (Text) (2)"
"Filename (Text) (Comment)"
"Filename (Audio) (Comment) (1)"
"Filename (Audio)"
"Filename (Picture) (1)"
"Filename (Picture)"
"Filename (Misc) (1)"
"Filename (Misc)"
"Filename (Word) (1) (Bad)"
所以我很快就能得到我想要的

以下是我正在做的:

$badExpression = { if ($_ -match '\((Bad)\)') { $matches[1] } }
$documentExpression = { if ($_ -match '\((Text|Word)\)') { $matches[1] } }
$soundExpression = { if ($_ -match '\((Audio)\)') { $matches[1] } }
$imageExpression = { if ($_ -match '\((Picture)\)') { $matches[1] } }
$numberExpression = { if ($_ -match '\((2|1)\)') { $matches[1] } }

"Filename (Text) (Comment)", "Filename (Word) (1)", "Filename (Word) (1) (Bad)", `
    "Filename (Text) (2)", "Filename (Picture)", "Filename (Misc)", "Filename (Misc) (1)", `
    "Filename (Picture) (1)", "Filename (Audio)", "Filename (Audio) (Comment) (1)" | Sort-Object `
@{Expression = $badExpression; Descending = $false}, `
@{Expression = $documentExpression; Descending = $true}, `
@{Expression = $soundExpression; Descending = $true}, `
@{Expression = $imageExpression; Descending = $true}, `
@{Expression = $numberExpression; Descending = $true}
我肯定是误解了我的表达是如何准确地应用于这一类的。我有一种预感,也许我必须对对象进行一系列排序,但我真的不知道是什么

让我们来关注一下:我的问题是,单词和文本应该按照相同的顺序进行排序

编辑:好的,我想我现在通过这个,一个微妙的改变,得到了我想要的行为,见我添加的-替换

$badExpression = { if ($_ -match '\((Bad)\)') { $matches[1] } }
$documentExpression = { if ($_ -match '\((Text|Word)\)') { $matches[1] -replace ".*",'Document'} }
$soundExpression = { if ($_ -match '\((Audio)\)') { $matches[1] } }
$imageExpression = { if ($_ -match '\((Picture)\)') { $matches[1] } }
$numberExpression = { if ($_ -match '\((2|1)\)') { $matches[1] } }

"Filename (Text) (Comment)", "Filename (Word) (1)", "Filename (Word) (1) (Bad)", `
    "Filename (Text) (2)", "Filename (Picture)", "Filename (Misc)", "Filename (Misc) (1)", `
    "Filename (Picture) (1)", "Filename (Audio)", "Filename (Audio) (Comment) (1)" | Sort-Object `
@{Expression = $badExpression; Descending = $false}, `
@{Expression = $documentExpression; Descending = $true}, `
@{Expression = $soundExpression; Descending = $true}, `
@{Expression = $imageExpression; Descending = $true}, `
@{Expression = $numberExpression; Descending = $true}

所以对于互联网点:我的脚本除了工作之外还有什么作用,我想更好地理解它我大致了解正在发生的事情,但我想更好地了解它。

这不是直截了当的。但我更愿意先把它分类为自然的

然后,至少您将直接获得这样的O/p,按音频、杂项、图片、文本排序:

"Filename (Audio) (Comment) (1)"
"Filename (Audio)"
"Filename (Misc) (1)"
"Filename (Misc)"
"Filename (Picture) (1)"
"Filename (Picture)"
"Filename (Text) (2)"
"Filename (Text) (Comment)"
"Filename (Word) (1) (Bad)"
"Filename (Word) (1)"

之后,您可以根据需要使用一些正则表达式进行匹配。让我知道这种方法是否对您有帮助。

刚刚偶然发现了这个答案,您没有定义如下变量$ToNatural={[regex]::Replace$680;,'\ d+',{$args[0].Value.PadLeft20,0}我的配置文件中也定义了它:-
"Filename (Audio) (Comment) (1)"
"Filename (Audio)"
"Filename (Misc) (1)"
"Filename (Misc)"
"Filename (Picture) (1)"
"Filename (Picture)"
"Filename (Text) (2)"
"Filename (Text) (Comment)"
"Filename (Word) (1) (Bad)"
"Filename (Word) (1)"