【问题标题】:parsing '\L' - Unrecognized escape sequence解析 '\L' - 无法识别的转义序列
【发布时间】:2019-08-24 04:45:47
【问题描述】:

说实话,我不明白为什么会出现此错误。以下测试失败并显示以下消息:

失败:System.ArgumentException:解析 '\L' - 无法识别的转义 序列\L。 System.ArgumentException:解析 '\L' - 无法识别 转义序列 \L。

尽管所有在线正则表达式测试器都显示完全匹配结果,但仍会发生这种情况。我在这里没有正确转义“\”字符吗?

        [Fact]
        public void LineMathesRegex()
        {
            string line = "\\L";

            bool result = Act("\\L", line);

            Assert.True(result);
        }

        private bool Act(string regexExpression, string line)
        {
            var regex = new Regex(regexExpression, RegexOptions.IgnoreCase);

            return regex.IsMatch(line);
        }

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    如果要匹配文字字符串“\L”,则需要两个反斜杠来获得正确的正则表达式字符串。否则,正则表达式引擎将尝试将“\L”解析为转义序列,正如您的错误所示。由于您想转义反斜杠以进行字面匹配,您可以输入两个转义的反斜杠,如下所示:

    bool result = Act("\\\\L", line);
    

    或者您可以使用逐字字符串

    bool result = Act(@"\\L", line);
    

    【讨论】:

    • 谢谢!你能解释一下原因吗?
    • @aspdev 当然,我已经添加了一些关于发生的事情。本质上,您传递的字符串一旦被 Regex 引擎读入,就会被解释为与“\L”相同,它认为这是一个不存在的转义序列 - 解决方案是确保您传递的字符串是"\\L",因此引擎将反斜杠解释为转义。
    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    相关资源
    最近更新 更多