【问题标题】:Regex returns escaped match in .NET - why?正则表达式在 .NET 中返回转义匹配 - 为什么?
【发布时间】:2011-06-24 04:26:22
【问题描述】:

正如您在屏幕截图中看到的那样,capture 捕获了正确的值 Boton \"Reservar\",但该属性似乎不可用。 Value 返回该值但已转义,这不是我需要的。这是 .NET 的正常行为吗?通常情况下 Value 显示的值与对象字符串相同,但这次它被转义了。

此外,正如您在即时窗口中看到的那样,capture.ToString() 甚至 group 都会显示转义的值。

更糟糕的是,Value 被包裹在引号中,这不是正则表达式应该匹配的内容。

我已经尝试将 capture 转换为 Group 并再次调用 capture.Captures 以查看真正的匹配是否隐藏在更深的组中,但它不是。

有什么想法吗?

【问题讨论】:

    标签: c# .net regex escaping


    【解决方案1】:

    字符串 in memory 是正确的 - 它只是它在立即 / watch / locals 窗口中的表示,它被转义了。我不知道为什么 Visual Studio 的人决定这样做,但一种可能的解释是您可以按原样复制该字符串并粘贴到您的代码中:

    var match = "Botón \\\"Reservar\\\"";
    

    并且它将具有捕获的实际值。如果单击“Value”属性值旁边的放大镜,您将看到没有转义的字符串。

    【讨论】:

    • 你是对的。如果我将 Value 传递给 Console.WriteLine,它会根据需要返回字符串。有没有像 WriteLine 这样返回字符串而不是 void 的方法? Regex.Unescape 没有这样做。
    • 如果你只是简单地将捕获的值赋给一个变量,你会得到正确的值:var captureString = capture.Value;
    • 我希望是这样,但它逃脱了。
    • 好的,我发现了问题,我们代码库中的一些意外替换正在修改字符串的最终结果。我摆脱了这些,现在我可以使用 .NET 给我的字符串,转义了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2022-01-21
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多