【问题标题】:.NET Regex Replace Single Line Matching Unknown Character.NET 正则表达式替换单行匹配未知字符
【发布时间】:2011-12-02 15:51:48
【问题描述】:

这让我非常困惑。为什么我在以下代码中得到重复的替换字符串:

static void Main(string[] args)
{
    String input = "test";
    String pattern = ".*";
    String replacement = "replace";
    Console.WriteLine(Regex.Replace(input, pattern, replacement));
    Console.Read();
}

这会输出到控制台:

replacereplace

我知道正则表达式会匹配到奇怪的结束行字符,但应该没有。我也明白模式不能匹配任何东西,但显然输入不是什么都没有。这发生在 .Net 3.5 和 4.0 中,我使用 SingleLine 和 MultiLine 得到相同的结果。

我知道有几种替代方法可以达到我的预期,但我想知道更多关于其他匹配的内容。*认为它的发现。

【问题讨论】:

    标签: c# .net regex replace


    【解决方案1】:

    你得到两个替换的原因是因为.*你得到两个匹配:"test"""

    如果您将.* 更改为.+,它将按照您期望的方式工作:

    String pattern = ".+";
    

    另一种选择是添加字符串锚的开头:

    String pattern = "^.*"; // I know this looks like a smiley
    

    【讨论】:

    • 你让我进入了终点线 :)
    • 我同意,这确实可以解决问题,但我正在寻找原因。
    • Chrome 应用程序“Regex Tester App”显示相同的行为,直到您检查全局标志。我只是希望.Net 也可以实现这个标志......
    【解决方案2】:

    它什么都不匹配,然后它匹配所有东西,因此你有两个匹配和两个替换。

    【讨论】:

    • 什么都没有。为什么我以前从来没有遇到过这种情况。
    • @JoshuaBelden 也许你确实跑过它但你从未发现它:)
    猜你喜欢
    • 2015-11-30
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2011-09-03
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    相关资源
    最近更新 更多