这是我的数据
EntityManager.find(class, id)
我想从第一个时间间隔开始提取所有内容。
When: 1300 - 1500 Apr 16
我尝试了以下1500 Apr 16
,当我在线尝试时,它可以工作但是当我运行它失败时。我确信有一种更简单的方法,但我不确定如何。
答案 0 :(得分:1)
尝试以下正则表达式:
When:.+(?<=- )(\d+)
您想要的内容将在第二组。
示例:
var data = "When: 1300 - 1500 Apr 2016";
var match = Regex.Match(data, @"When:.+(?<=- )(\d+)");
Console.WriteLine(match.Success ? match.Groups[1].Value : data)
这将在屏幕上打印1500
。
答案 1 :(得分:0)
如果您打算在连字符和可选空格后获取数字,请使用
var inp1 = "When: 1300 - 1500 Apr 2016";
var m1 = Regex.Match(inp1, @"-\s*(\d+)");
Console.WriteLine(m1.Success ? m1.Groups[1].Value : string.Empty);
// => 1500
或者,如果您只是计划从字符串中获取第二个整数,请使用
var result = inp1.Split(new[] { ' ', '-' }, StringSplitOptions.RemoveEmptyEntries) // Split with space and hyphen
.Where(p => p.All(m => Char.IsDigit(m))) // Get numeric only parts
.Skip(1) // Skip the first element
.Take(1) // Take the second one
.FirstOrDefault();
答案 2 :(得分:0)
我最喜欢玩表达式的方式是http://www.regexr.com/
我的Regexpression:
When:.*- (\d*)
测试案例:
1,3,5捕获1500
编辑:WiktorStribiżew的原因评论
为了解释额外的问题 - 在文本中第一次搜索应该是这样的
When:.*?- (\d*)
这里的问题是,如果有破折号之前它也会引起问题。 两种解决方案都应该适合您的特定模式
这个人会期望一个数字一个空格一个短划线和一个第二个数字......第二个数字将在这里被捕获
When:.*?\d\b.*?- (\d*)