簡體   English   中英

正則表達式如何獲取句子之間最后一個元素的時間

[英]How regex get last element's time between a sentence

例如
我想得到下面的句子最后同意時間,如圖片。

輸入:

Agree|AAA Agree 7/28 22:34,Agree|BBBB Agree 7/28 23:20,Agree|CCC Agree 7/29 07:41,Agree|JJJ Agree 7/29 07:45,Agree|DDD Agree 7/29 07:54,forward|EEE forward 7/29 07:54,forward|FFF forward 7/29 07:54,forward|GGG forward 7/29 07:54,forward|HHHH forward 7/29 07:54

預期 output:

7/29 07:54

image-20200729082045279

我試過使用 LINQ 但我只能像圖片那樣做。

void Main()
{
    var input = "Agree|AAA Agree 7/28 22:34,Agree|BBBB Agree 7/28 23:20,Agree|CCC Agree 7/29 07:41,Agree|JJJ Agree 7/29 07:45,Agree|DDD Agree 7/29 07:54,forward|EEE forward 7/29 07:54,forward|FFF forward 7/29 07:54,forward|GGG forward 7/29 07:54,forward|HHHH forward 7/29 07:54";
    var output = input.Split('|')
        .Where(_ => _.Contains("Agree")).Select((e, index) => new {e,index})
        .OrderByDescending(_=>_.index)
        .Take(1);
}

圖像-20200729082008606

這個正則表達式可以解決問題

Agree (\d{1,2}\/\d{1,2} \d{1,2}:\d{1,2})(?!.*Agree \d{1,2}\/\d{1,2} \d{1,2}:\d{1,2})

這意味着Agree \d{1,2}\/\d{1,2} \d{1,2}:\d{1,2}后面沒有出現任何Agree \d{1,2}\/\d{1,2} \d{1,2}:\d{1,2}

然后你會這樣做以將7/29 07:54提取到lastAgree變量中

string pattern = @"Agree (\d{1,2}\/\d{1,2} \d{1,2}:\d{1,2})(?!.*Agree \d{1,2}\/\d{1,2} \d{1,2}:\d{1,2})";           

// Get your match using pattern
var match = Regex.Match(text, pattern);

// Groups[1] is (\d{1,2}\/\d{1,2} \d{1,2}:\d{1,2})
var lastAgree = match.Groups[1].Value; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM