RegEx搜索单词然后在短划线后匹配

时间:2016-04-22 15:33:33

标签: c# regex

这是我的数据

EntityManager.find(class, id)

我想从第一个时间间隔开始提取所有内容。

When: 1300 - 1500 Apr 16

我尝试了以下1500 Apr 16 ,当我在线尝试时,它可以工作但是当我运行它失败时。我确信有一种更简单的方法,但我不确定如何。

3 个答案:

答案 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)时间:2016年4月13日至1500日
  • 2)2016年4月13日至1500日
  • 3)时间: - 1500asdasd
  • 4) - 2016年4月15日
  • 5)时间: - 1500
  • 6)时: - 1500

1,3,5捕获1500

编辑:WiktorStribiżew的原因评论

为了解释额外的问题 - 在文本中第一次搜索应该是这样的

 When:.*?- (\d*)

这里的问题是,如果有破折号之前它也会引起问题。 两种解决方案都应该适合您的特定模式

这个人会期望一个数字一个空格一个短划线和一个第二个数字......第二个数字将在这里被捕获

When:.*?\d\b.*?- (\d*)