正则表达式搜索单词,然后在破折号后匹配

本文关键字:破折号 然后 搜索 单词 正则表达式 | 更新日期: 2024-11-07 21:53:44

这是我的数据

When: 1300 - 1500 Apr 16

我想从 when 行中提取从第二个时间间隔开始的所有内容。

1500 Apr 16

我已经尝试了以下方法(?<=When:'s)|('d+)[^-]*$当我在线尝试时它可以工作,但是当我运行时它失败了。我相信有一种更简单的方法,但我不确定如何。

正则表达式搜索单词,然后在破折号后匹配

尝试以下正则表达式:

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

如果您打算只获取连字符和可选空格后的数字,请使用

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();

我最喜欢的玩eg表达式的方式是 http://www.regexr.com/

我的注册表达式:

When:.*- ('d*)

测试用例:

  • 1) 时间: 1300 - 1500 Apr 2016
  • 2) 1300 - 1500 四月 2016
  • 3) 时间:- 1500 阿斯达斯d
  • 4) - 1500 四月 2016
  • 5) 时间:- 1500
  • 6) 时间:- 1500

1,3,5 捕获 1500

编辑:Wiktor Stribiżew的原因评论

为了解释额外的 - 在文本中,第一次搜索应该是像这样不贪婪的

 When:.*?- ('d*)

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

这个期望一个数字一个空格一个破折号和第二个数字..第二个数字将在这里捕获

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