Powershell Regex有助于在字符串之间提取文本

时间:2010-06-04 06:17:27

标签: regex powershell

我有一个像下面那个我传递给powershell脚本的论点

-arg1 -abc -def -arg2 -ghi -jkl -arg3 -123 -234

现在我需要提取三个没有任何空格的字符串

string 1: "-abc -def" 

string 2: "-ghi -jkl"

string 3: "-123 -234"

我认为这个表达式可以做到。但这似乎不起作用。

$args -match '-arg1(?'arg1'.*?) -arg3(?'arg3'.*?) -arg3(?'arg3'.*)'. 

这应该返回$ matches ['arg1']等。所以上面的表达式有什么不对。为什么我会收到如下所示的错误

runScript.ps1 -arg1 -abc -def -arg2 -ghi -jkl -arg3 -123 -234

Unexpected token 'arg1'.*?) -arg2
(?'arg2'.*?) -arg3 (?'arg3'.*)'' in
expression or statement. At
G:\powershell\tools\powershell\runTest.ps1:1
char:71
+ $args -match '-arg1 (?'arg1'.*?) -arg2 (?'arg2'.*?) -arg3 (?'arg3'.*)' <<<<
    + CategoryInfo          : ParserError: (arg1'.*?) -arg2...g3
(?'arg3'.*)':String) [],
ParseException
    + FullyQualifiedErrorId : UnexpectedToken

还有第二个问题是我如何选择arg1arg2arg3

脚本的参数可以是

-arg2 -def -ghi.

我会为arg(1|2|3)取一些未提及的默认值。

由于

1 个答案:

答案 0 :(得分:0)

似乎堆栈溢出语法荧光笔已经为你破坏了它:你是双重使用'字符;对于命名组和整个字符串。

我无法尝试,因为我在这个盒子上没有PS,但是怎么样:

$args -match '-arg1(?<arg1>.*?) -arg2(?<arg2>.*?) -arg3(?<arg3>.*)'

另外,我会用\s+替换空格,这样也允许参数之间有多个空白字符。