Regex 在字符上拆分字符串,除非折叠字符是转义符

Regex 在字符上拆分字符串,除非折叠字符是转义符,regex,powershell,split,Regex,Powershell,Split,输入: 输出: $string = "this-is-just-an--example" 尝试了以Regex.Split和“-[^-]”或“-([^])”为中心的各种方法。 不起作用的事情的示例: this is just an-example 当然,我可以使用String.Split和iterate,并意识到空字符串意味着我遇到了转义字符。。。但这是丑陋的代码。 P.S.尝试搜索Dupped几分钟,但没有找到任何内容。使用lookahead和lookahead断言,然后执行替换以消除剩余的

输入:

输出:

$string = "this-is-just-an--example"
尝试了以Regex.Split和“-[^-]”或“-([^])”为中心的各种方法。 不起作用的事情的示例:

this
is
just
an-example
当然,我可以使用String.Split和iterate,并意识到空字符串意味着我遇到了转义字符。。。但这是丑陋的代码。
P.S.尝试搜索Dupped几分钟,但没有找到任何内容。

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

[regex]::Split( $string, "-[^-]" )
[regex]::Split( $string, "-([^-])" )
$string=“这只是一个--示例”

$string-split'(?使用前向和后向断言,然后执行替换以消除剩余的双字符:

[regex]::Split( $string, "-[^-]" )
[regex]::Split( $string, "-([^-])" )
$string=“这只是一个--示例”

$string-split'(?首先将转义序列替换为另一个值,这样就不需要复杂的拆分条件。所需的只是字符串中尚未出现的唯一替换值

例如,使用
@
作为
$string='这只是一个--example'
的替换值,以下行将得到所需的结果:

$string-replace'-','@'-split'-'-replace'@','-'
  • -replace'--','@'
    消除转义序列(这只是-an@example
  • -split'-'
    然后分离结果(给出一个数组,其中包含
    this
    is
    just
    an@example
  • 最后,
    -替换'@','-'
    恢复转义值(给出
    这个
    只是
    一个例子

  • 和都是使用正则表达式(相当于.NET中的和方法)处理字符串的内置PowerShell运算符。

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

    例如,使用
    @
    作为
    $string='这只是一个--example'
    的替换值,以下行将得到所需的结果:

    $string-replace'-','@'-split'-'-replace'@','-'
    
    • -replace'--','@'
      消除转义序列(这只是-an@example
  • -split'-'
    然后分离结果(给出一个数组,其中包含
    this
    is
    just
    an@example
  • 最后,
    -替换'@','-'
    恢复转义值(给出
    这个
    只是
    一个例子

  • 和都是使用正则表达式(相当于.NET中的和方法)处理字符串的内置PowerShell运算符。

    (?将仅在单破折号上匹配,但它不适用于--b-c->a--,b,c
    (?仅在单破折号上匹配,但在a--b-c->a--,b,c上不起作用。接受,然后在没有解释的情况下被否决。有趣。接受,然后在没有解释的情况下被否决。