【问题标题】:Look Around does not deliver expected result with .net使用 .net 环顾四周没有提供预期的结果
【发布时间】:2010-10-19 14:32:20
【问题描述】:

我想使用前瞻正则表达式替换 System.Text.RegularExpression.Replace(...) 方法。

现在我想知道怎么了。看这个示例代码:

        string input = "stackoverflow";
        string replacement = "#";

        var pattern1 = "(?=[a-z])o";
        var result1 = Regex.Replace(input, pattern1, replacement);
        // result1 = stack#verfl#w (as expected)

        var pattern2 = "(?=[a-k])o";
        var result2 = Regex.Replace(input, pattern2, replacement);
        // result2 = stackoverflow (expected: stack#overflow)

        var pattern3 = "(?=k)o";
        var result3 = Regex.Replace(input, pattern3, replacement);
        // result3 = stackoverflow (expected: stack#overflow)

        var pattern4 = "[a-k]";
        var result4 = Regex.Replace(input, pattern4, replacement);
        // result4 = st###ov#r#low (as expected)

        var pattern5 = "([a-k])o";
        var result5 = Regex.Replace(input, pattern5, "$1#");
        // result5 = stack#verflow" (as expected)

这很奇怪。 我可以在我的前瞻表达式中使用[a-z],但不能使用[a-k],甚至不能使用k。 我真正想要的是最后一个例子(pattern5)的结果。这是一种解决方法,但我很认真,为什么 pattern2 或 pattern3 没有返回预期的结果。结果。

【问题讨论】:

    标签: .net regex replace


    【解决方案1】:

    我认为您对前瞻的想法有些混乱。当你说,在模式 2 中,

    (?=[a-k])o
    

    这意味着“当我们在下一个字符是从ak 的地方时,匹配一个o”。不出所料,这永远不会匹配 - 如果我们处于下一个字符 ak 的地方,那么它不会 是 @987654327 @!

    模式 3 更加明显

    (?=k)o
    

    表示“当我们在下一个字符是k 的地方,匹配一个o”。同样,没有匹配项。

    pattern1 匹配的原因是因为oa-z中,所以只要下一个字符是o,它也符合'something in a to z' 等匹配。

    我也不确定为什么您希望 # 不会在 2 和 3 中替换 o。如果 5 正在做您想做的事,那么您肯定可以使用它吗?我不能轻易地看到如何使用前瞻来做 5 正在做的事情 - 执行操作“匹配(只是)o 这是 precededak',看看-后面似乎是显而易见的答案:

    (?<=[a-k])o
    

    应该匹配这样的o(但我自己没有运行过)。

    【讨论】:

    • 是的,我把向前看和向后看混合在一起。惭愧,我的错。感谢您的详细解释。
    【解决方案2】:

    问题是, (?= 匹配当前输入但不向前移动。所以 (?=[a-z]) 匹配“o”,不向前移动,然后你匹配“o” ”。

    你想往后看吗? "(?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2014-09-06
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      相关资源
      最近更新 更多