【问题标题】:Regex to match full lines of text excluding crlf正则表达式匹配整行文本,不包括 crlf
【发布时间】:2011-05-10 21:48:24
【问题描述】:

如何匹配给定文本的每一行的正则表达式模式?

我正在尝试^(.+)$,但它包含 crlf...

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    只需使用RegexOptions.Multiline

    多行模式。改变的意思 ^ 和 $ 所以它们在开头匹配 和结束,分别,任何行, 而不仅仅是开始和结束 整个字符串。

    例子:

    var lineMatches = Regex.Matches("Multi\r\nlines", "^(.+)$", RegexOptions.Multiline);
    

    【讨论】:

      【解决方案2】:

      我不确定您所说的“匹配给定文本的每一行”是什么意思,但您可以使用字符类来排除 CR 和 LF 字符:

      [^\r\n]+
      

      【讨论】:

        【解决方案3】:

        您问题的措辞似乎有点不清楚,但听起来您想要RegexOptions.Multiline(在System.Text.RegularExpressions 命名空间中)。这是您必须在 RegEx 对象上设置的选项。这应该使^$ 匹配 的开头和结尾,而不是整个字符串。

        例如:

        Regex re = new Regex("^(.+)$", RegexOptions.Compiled | RegexOptions.Multiline);
        

        【讨论】:

          【解决方案4】:

          你试过了吗:

          ^(.+)\r?\n$
          

          这样,匹配组包含除 CRLF 之外的所有内容,并要求存在新行(Unix 默认),但接受前面的回车(Windows 默认)。

          【讨论】:

          • ^(.+?)\r?\n$ 或者它贪婪地吃掉\r(.+ == 贪婪,.+? == 非贪婪)
          【解决方案5】:

          我假设您使用的是多行选项?在这种情况下,您需要明确地将换行符与“\n”匹配。 (酌情替换为“\r\n”。)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-12-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-24
            相关资源
            最近更新 更多