【问题标题】:C# Regex find string between two strings with newLineC#正则表达式用newLine在两个字符串之间查找字符串
【发布时间】:2012-05-27 11:18:21
【问题描述】:

这是我的正则表达式:Regex r = new Regex("start(.*?)end", RegexOptions.Multiline);

这意味着我想获得"start""end" 之间的内容。但问题是 start 和 end 之间是一个新行或 \n 并且正则表达式不返回任何内容。

那么如何让正则表达式找到\n

【问题讨论】:

    标签: c# .net regex string


    【解决方案1】:

    Multiline 选项的名称具有误导性,正确的选项之一也具有误导性 - Singleline

    Regex r = new Regex("start(.*?)end", RegexOptions.Singleline);
    

    来自 MSDN,RegexOptions Enumeration

    Singleline - 指定单行模式。更改点 (.) 的含义,使其匹配每个字符(而不是除 \n 之外的每个字符)。

    【讨论】:

    • +1 我们可以在这里做些什么来排除 start 和 end ,也就是说,如果我只想获取 start 和 end 之间的值。
    【解决方案2】:

    包括 RegexOptions.SingleLine,这意味着 . 匹配所有内容,包括 \n

    Regex r = new Regex("start(.*?)end", RegexOptions.Multiline | RegexOptions.SingleLine);
    

    更多详情请见http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regexoptions.aspx

    【讨论】:

    • 嗯,所有其他人都说我只能使用 singleLine。我添加多行是否重要?
    • 在你的情况下,不,它不会有任何区别,除非你在你的正则表达式中使用 ^ 或 $ 。有关所有枚举的定义,请参阅链接文档。
    • 什么,如果我有多个开始...一些文本....结束对在我的输入中,并且想要全部获得?示例: start ....我想要的文本 ... end start ... 我想要的另一个文本 ... end 当我使用 Singleline 时,点匹配 CR\LF 但我只得到一个匹配项。
    【解决方案3】:

    使用单行代替多行

    Regex r = new Regex("start(.*?)end", RegexOptions.Singleline);
    

    顺便说一句,RegexBuddy 是您宝贵的朋友(不,我与作者没有任何联系,除了是一个快乐的用户)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-19
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多