正则表达式:匹配直到找到模式

时间:2010-06-09 08:18:37

标签: .net regex

我想从字符串中提取状态,直到我找到了一个时间跨度。我的输入类似于“开始时的东西,但没有确定的关键字。状态:我的状态在这里哪个可以是除了时间跨度23:59:01等等。我想在状态后提取字符串: 直到 23:59:01 。我怎么能通过正则表达式实现这一点。这个 23:59:01 是一个时间跨度,它总是在这个格式 hh:mm:ss

2 个答案:

答案 0 :(得分:1)

您的规范尚不清楚,但您可以尝试STATUS: (.*?) \d{2}:\d{2}:\d{2};这会将您想要的部分捕获到组1中。

如果.也匹配换行符,您可能需要启用单行。

另见


在C#中,你会写这样的东西(see it on ideone.com):

Regex r = new Regex(@"STATUS: (.*?) \d{2}:\d{2}:\d{2}", RegexOptions.Singleline);
foreach (Match match in r.Matches(text)) {
  Console.WriteLine("[[[" + match.Groups[1] + "]]]");
}

RegexOptions.Singleline允许.匹配任何字符,因此当所需字符串包含换行符时,它会起作用。

参考


为什么不情愿?

这是为了防止您需要多个匹配(如上所示)。在下面的示例中,只有一个A.*Z(贪婪)。

---A--Z----A----Z---
   ^^^^^^^^^^^^^^
       A.*Z

答案 1 :(得分:0)

试试这个:

STATUS:[\sa-zA-Z]+?[:\d]{8}