正则表达式在句子中跳过一个单词

时间:2015-12-04 16:14:06

标签: c# regex

我有一句话,例如:

  

产品必须在2015年12月25日之前发货时间:12:30:00

我想要做的是捕捉日期/时间,而不是“"时间:"在答案中。因此捕获组将包含 25-Dec-2015 12:30:00

我尝试过前瞻和后视但没有任何成功。

2 个答案:

答案 0 :(得分:1)

您可以使用群组分别捕捉日期和时间:

(\d{1,2}-[a-zA-Z]{3}-\d{4}) Time: (\d{2}:\d{2}:\d{2})

此处整个匹配为25-Dec-2015 Time: 12:30:00,但您可以访问第一组25-Dec-2015和第二组12:30:00

答案 1 :(得分:1)

这种模式:

^.*\s+(\d\d-...-2\d\d\d)\s+Time:\s+(\d\d:\d\d:\d\d)

将找到两个子串并将它们分组。

如果您的下一步包括编程,您可以再次连接它们。

这是一个C#示例:

    static void Main(string[] args)
    {
        string pattern = @"^.*\s+(\d\d-...-2\d\d\d)\s+Time:\s+(\d\d:\d\d:\d\d)";
        string input = "The product must be shipped by 25-Dec-2015 Time: 12:30:00";

        Match match = Regex.Match(input, pattern);

        string date = match.Groups[1].Value;
        string time = match.Groups[2].Value;

        string concatenated = date + " " + time;
        Console.WriteLine(concatenated);

    }

请注意Regex!=正则表达式。根据实施情况,存在差异。

Jeffrey E. F. Friedl写了一本关于这个主题的优秀书。