c# - 正则表达式如何获取句子之间最后一个元素的时间
问题描述
例如
,我想得到最后同意时间的句子,如图片。
输入 :
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
预期输出:
7/29 07:54
我试过使用 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);
}
解决方案
这个正则表达式可以解决问题
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;
推荐阅读
- ios - 尝试使用可选运行变量时崩溃
- amazon-web-services - 在 AWS 中查找文件
- php - 使php识别是否单击了右键
- html - 使用 Formspree 的表单提交错误
- vmware - 将 WinDbg 连接到 vmware
- html - Angular NgFor 元素水平显示为标签
- oracle-sqldeveloper - 未找到父键,但存在 oracle DB
- git - Git Kraken 是否支持全局 git 挂钩
- google-cloud-storage - 如何找出 Google Cloud 支持的最新 Node.js 版本?
- r - 在使用 R 估计的 ergm 模型中解释 nodemix() 项的输出