输入:
$string = "this-is-just-an--example"
输出:
this
is
just
an-example
尝试以Regex.Split和“ - [^ - ]”或“ - ([^])”为中心的各种事物。 不起作用的例子:
[regex]::Split( $string, "-[^-]" )
[regex]::Split( $string, "-([^-])" )
当然我可以使用String.Split并迭代,并意识到空字符串意味着我遇到了转义字符...但它是丑陋的代码。 附:试图寻找骗子几分钟,没找到任何。
答案 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 '-'
然后分隔结果(提供包含this
,is
,just
和an@example
)的数组,-replace '@','-'
恢复转义价值(提供this
,is
,just
,an-example
)。 -split
和-replace
都是内置的PowerShell运算符,它们使用正则表达式处理字符串(相当于.NET中的Regex.Split
和Regex.Replace
方法。)< / p>