【问题标题】:Regex split a multiline string using \正则表达式使用 \ 拆分多行字符串
【发布时间】:2010-10-14 13:21:56
【问题描述】:

我已经尝试了 RegexOptions.MultiLine 和转义反斜杠的几乎所有可能组合,以便使用 \ 作为分隔符来分割文本。

我有这段文字:

The quick brown
Fox jumps\
Over the
Lazy dog\

我想把它拆分成

The quick brown
Fox jumps\

Over the
Lazy dog\

到目前为止我已经尝试过(连同对 Regex 的 Split 方法的调用):

Regex regexSplit = new Regex(@"\\$", RegexOptions.Multiline);
Regex regexSplit = new Regex(@"\$", RegexOptions.Multiline);
Regex regexSplit = new Regex(@"\\$", RegexOptions.Singleline);
Regex regexSplit = new Regex(@"\$", RegexOptions.Singleline);
Regex regexSplit = new Regex(@"\\$");
Regex regexSplit = new Regex(@"\$");

每次我得到完整的原始字符串。 请帮帮我好吗?

提前谢谢你。

编辑:我删除了一个额外的空间。 我需要使用正则表达式的原因是因为 \ 可能位于用“”或“”括起来的匹配项中。 这就是为什么我也需要在行尾匹配。

我必须补充一点,当我使用 RegexBuddy 和相同的输入文本测试表达式时,\\$ 有效。

【问题讨论】:

    标签: c# regex split multiline


    【解决方案1】:

    你在“Fox jumps\”处有一个额外的空格,所以@"\\$" 将不匹配。要么删除空格,要么使用@"\\" 进行拆分。你也可以检查空格@"\\\s*$"

    这个应该可以解决问题:

    var results = Regex.Split(subject, @"\\\s*$", RegexOptions.Multiline);
    

    【讨论】:

    • 谢谢,我删除了多余的空间。
    • 它正在工作!我必须补充一点,在这种情况下,我不相信 \ 和行尾之间有空格。无论如何感谢您的帮助!
    【解决方案2】:

    为什么不用这个简单的字符串拆分:

            string s = "The quick brown\r\nFox jumps\\\\r\n Over the\r\nLazy dog\\";
        s.Split(new string[] { "\\\r\n" }, StringSplitOptions.RemoveEmptyEntries);
    

    【讨论】:

    • 只有当 \ 位于行尾时,他才可能有兴趣拆分。
    • 这样您就不会考虑所有可能的 EOL 组合,例如 \r\n,而只考虑 windows 样式的 \r\n。正则表达式$ 使用起来更安全。
    猜你喜欢
    • 2017-02-23
    相关资源
    最近更新 更多