在字符上拆分字符串,除了加倍的字符是转义

时间:2012-03-29 01:11:57

标签: regex powershell split

输入:

$string = "this-is-just-an--example"

输出:

this
is
just
an-example

尝试以Regex.Split和“ - [^ - ]”或“ - ([^])”为中心的各种事物。 不起作用的例子:

[regex]::Split( $string, "-[^-]" )
[regex]::Split( $string, "-([^-])" )

当然我可以使用String.Split并迭代,并意识到空字符串意味着我遇到了转义字符...但它是丑陋的代码。 附:试图寻找骗子几分钟,没找到任何。

2 个答案:

答案 0 :(得分:0)

使用lookahead和lookbehind断言,然后执行替换以消除剩余的双字符:

$string = "this-is-just-an--example"
$string -split '(?<!-)-(?!-)' -replace '--','-'

this
is
just
an-example

答案 1 :(得分:0)

首先用另一个值替换转义序列,无需复杂的拆分条件。所需要的只是一个未出现在字符串中的唯一替换值。

例如,使用@作为$string = 'this-is-just-an--example'的替换值,以下行将获得所需的结果:

$string -replace '--','@' -split '-' -replace '@','-'
  • -replace '--','@'消除了转义序列(提供this-is-just-an@example),
  • -split '-'然后分隔结果(提供包含thisisjustan@example)的数组,
  • ,最后-replace '@','-'恢复转义价值(提供thisisjustan-example)。

-split-replace都是内置的PowerShell运算符,它们使用正则表达式处理字符串(相当于.NET中的Regex.SplitRegex.Replace方法。)< / p>