在数据中搜索整数

时间:2017-02-28 12:09:46

标签: regex

我的正则表达式没什么问题。

  

UBS GROUP N(UBSG / CH0244767585)
  2017年8月2日
  时间价格量   11:37:30 15.44 4447
  11:37:29 15.44 432

RegExr: Learn, Build & Test

首先,我已经找到了时间和价格:

价格:vc.scale(-1, -1) 时间:\d+\.\d{1,2}

现在我需要音量,这就是问题所在。 问题:我可以做和有条件吗?如何?

\d{1,2}:\d{2}:\d{2}[^\d+\.\d{1,2}]以及[^\d{1,2}:\d{2}:\d{2}]

我测试了一些没有结果的东西。谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

如果您只想要音量而不使用其他音量,请使用\d+$ 如果没有,请在评论中使用Wiktor建议的正则表达式。

答案 1 :(得分:0)

您可以编写一个与整个字符串匹配的正则表达式,并捕获您只需要的内容。

 \d{1,2}:\d{2}:\d{2}\s+\d+\.\d{1,2}\s+(\d+)

请参阅regex demo,仅捕获(\d+),该值将驻留在Match.Groups[1]

<强>详情:

  • \d{1,2}:\d{2}:\d{2} - 1或2个数字感染,:,2位数,:和2位
  • \s+ - 1个或多个(+)空格符号
  • \d+\.\d{1,2} - 1位数字,文字.,然后是1或2位数字
  • \s+ - 1个或多个(+)空格符号
  • (\d+) - Capturing group#1 匹配并在内存缓冲区中存储1位数字。

C#:

var results = Regex.Matches(s, @"\d{1,2}:\d{2}:\d{2}\s+\d+\.\d{1,2}\s+(\d+)")
        .Cast<Match>()
        .Select(m => m.Groups[1].Value)
        .ToList();

另外,要抓取末尾的一个或多个数字,您可以使用(?m)\d+\r?$并获取匹配值:

var results = Regex.Matches(s, @"(?m)\d+\r?$")
        .Cast<Match>()
        .Select(m => m.Value)
        .ToList();

(?m)内联修饰符会使$的结尾匹配,而不是整个字符串。另外,如果行结尾为CRLF,则必须在\r?之前添加$