在Powershell 6中将System.Text.RegularExpressions.Regex作为函数参数传递

时间:2018-11-23 09:43:44

标签: powershell powershell-v6.0

Powershell专家您好,

我想编写一个将System.Text.RegularExpressions.Regex作为参数的Powershell函数。我的函数头是这样的:

#python 3.6 +
f = lambda x: f'Value {x + 1}'
#python bellow 3.6
#f = lambda x: 'Value {}'.format(x + 1)
d = {x: pd.DataFrame(df[x].values.tolist(), index=df.index).rename(columns=f) 
        for x in df.columns}
df = pd.concat(d, axis=1)

df = df.loc[:, pd.IndexSlice[:, ['Value 1','Value 3','Value 5']]]
print (df)
            A                       B                
      Value 1 Value 3 Value 5 Value 1 Value 3 Value 5
Run 1       0       0       6       1       3       5
Run 2       0       0       1       1       3       0

df.to_excel(file)

我试图这样叫function Foo { Param([System.Text.RegularExpressions.Regex] $myRegex) # function body }

Foo

我遇到一个错误,提示$MY_REGEX = new-object System.Text.RegularExpressions.Regex('<regex_body>') Foo($MY_REGEX)

我想知道为什么会这样,因为我用Cannot convert the "System.Object[]" value of type "System.Object[]" to type "System.Text.RegularExpressions.Regex".类型显式定义了正则表达式。所以我对对象执行了.GetType(),我得到了:

System.Text.RegularExpressions.Regex

所以现在我很困惑为什么当基础类型匹配时它抱怨转换...

有人可以指出我在做什么错吗?

1 个答案:

答案 0 :(得分:1)

在命令行中,以下内容为我提供了一些相关的输出。你能提供一个完整的例子吗?

function foo { param ( [System.Text.RegularExpressions.Regex] $myRegex ) ; process { Write-Information -MessageData $myRegex -InformationAction Continue ; $myRegEx.GetType() | fl * } }
foo a.
$r = New-Object System.Text.RegularExpressions.RegEx("a.")
foo -MyRegex $r

并发出

a.

FullName                   : System.Text.RegularExpressions.Regex

尝试使用显示的最后一种语法。