正则表达式搜索单词,然后在破折号后匹配
本文关键字:破折号 然后 搜索 单词 正则表达式 | 更新日期: 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*)