Regex 开关/案例陈述

Regex 开关/案例陈述,regex,powershell,switch-statement,Regex,Powershell,Switch Statement,我有一个名为tabLength的函数,它应该返回一个字符串。这用于在文本文档中设置格式 有谁能看看我的switch语句,看看为什么我在第6行出现错误。这就是switch语句所经历的“情况” Function tabLength ( $line ) { $lineLength = $line.Length switch -regex ( $lineLength ) { "[1-4]" { return "`t`t`t" } "[5-15]" { r

我有一个名为
tabLength
的函数,它应该返回一个字符串。这用于在文本文档中设置格式

有谁能看看我的switch语句,看看为什么我在第6行出现错误。这就是switch语句所经历的“情况”

Function tabLength ( $line ) {
    $lineLength = $line.Length

    switch -regex ( $lineLength ) {
        "[1-4]" { return "`t`t`t" }
        "[5-15]" { return "`t`t" }
        "[16-24]" { return "`t" }
        default { return "`t" }
    }
}
错误消息:

无效的正则表达式模式:[5-15]。
在C:\Users\name\desktop\nslookup.ps1:52 char:11

+“[5-15]”
[5-15]
不是有效的正则表达式字符类。您正在匹配字符串,而不是数字,因此
[5-15]
本质上说是“匹配从“5”到“1”或“5”的单个字符”,这不是您想要的

如果删除该中间条件,则
[16-24]
也会同样失败

尝试一个
开关
语句,该语句不使用正则表达式,但使用脚本块作为条件,以便您可以使用范围进行测试,如下所示:

Function alignRight ( $line ) {
    '{0,30}' -f $line
}
函数表长度($line){
$lineLength=$line.Length
交换机($lineLength){
{1..4-包含${return''t`t'}
{5..15-包含${return'`t'}
{16..24-包含${return“`t”}
默认值{返回“`t”}
}
}
在powershell 3+中,您可以使用
-In
操作符并颠倒顺序:

函数表长度($line){
$lineLength=$line.Length
交换机($lineLength){
{$\-in 1..4}{return''t`t'}
{$\-in 5..15}{return`t`t}
{$\-in 16..24}{return`t}
默认值{返回“`t”}
}
}

正则表达式逐字符匹配,而不是整数。范围
[5-15]
对于正则表达式引擎根本没有意义

尝试添加锚定:

Function tabLength ( $line ) {
    $lineLength = $line.Length

    switch -regex ( $lineLength ) {
        "^[1-4]$" { return "`t`t`t" }
        "^[5-9]$|^1[0-5]$" { return "`t`t" }
        "^1[6-9]$|^2[0-4]$" { return "`t" }
        default { return "`t" }
    }
}
别逼我回答你的直接问题。但是,既然你说你的目标是格式化文本,你可能想考虑一种完全不同的方法。 PowerShell有一个(
-f
)允许您以各种方式格式化字符串(以及数字或日期)。例如,如果要将文本对齐到30个字符宽的列(即左填充文本)的右侧,可以执行以下操作:

Function alignRight ( $line ) {
    '{0,30}' -f $line
}
您也可以将其用于填充在右侧的列

演示:

psc:\>'-{0,5}-'-f'abc'
-abc-
PS C:\>'-{0,-5}-'-f'abc'

-abc-
您能发布准确的错误消息吗?在这里工作非常好(Win7上的PS4.0)。是的,很抱歉,很好。另一种情况是,Regex根本不值得这么做。我会表现出来的out@MathiasR.Jessen这毕竟是一个家庭作业,有时给出的问题的边界没有意义,所以他可能必须使用正则表达式,所以+1表示正则表达式的方式。很好地解决了(可能)实际的根本问题!