【问题标题】:How to catch group In regex which includes newLine?如何在包含 newLine 的正则表达式中捕获组?
【发布时间】:2011-09-04 10:04:19
【问题描述】:

我有这样的段落,我需要将 INSIDE CONTENT 归为一组!

例如: 我需要在 AAABBB 之间进行 ANYTHING (AAA,BBB 应该包括在内),请注意AAA 和 BBB 之间的新行,\t \r \n

 AAA
          I Love You  /// can be any charcter + specials !!

    BBB

预期输出: 匹配[0].Groups[1].ToString() ===> 我爱你

【问题讨论】:

  • 是 AAA 并且 BBB 必​​须按此顺序,或者可以是 "BBB"..."BBB" 或 "AAA"..."AAA" 或 "BBB"..."AAA" 为好吗?

标签: c# regex


【解决方案1】:

使用以下模式:

@"AAA([\s\S]+)BBB"

【讨论】:

  • 如何 \S 不包括 BBB ? '+' 假设是贪婪的......?
  • \s 匹配空白字符,\S 匹配非空白字符。将两者结合起来只是一种说法,即捕获一切
  • 这种模式是贪婪的(它会吞下除了最后一个 BBB 之外的所有东西)。如果您需要非贪婪匹配,只需将 + 更改为 +?
  • 有一个问题 - 该组还将包含 \r 字符。所以它给了我我爱你\r而不是**我爱你**
  • 您确实说过您想捕获“AAABBB 之间的ANYTHING”。如果要去除前导和尾随空格,请将模式更改为 AAA\s*([\s\S]+?)\s*BBB
【解决方案2】:

如果您确定这两个字符串以该顺序存在并且只出现一次(您可以检查这一点),您可以使用String.split() 方法。

    String[] seperators={"AAA","BBB"};
    String[] contents=paragraph.split(seperators, StringSplitOptions.None);
    String content=contents[1]; //the content between the two seperator strings

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    相关资源
    最近更新 更多