正则表达式 Match/Wildcard

Regex Match/Wildcard

我有一个制表符分隔的文本文件,其中包含 comments/notes。

任何包含字符串“read”或“reading”的行 will/should 都有一个我要提取的 8 位数字。问题是我不知道 8 位数字在行中的什么位置。由于这些是用户生成的评论,每行可能不同。

来自文本文件的示例行:

3253442999934 did not read book # 98713429

我尝试过的:

var m = Regex.Match(realLine, @".*""reading"":""\b(?x)[0 - 9]{8}\b$"".*");
var n = Regex.Match(realLine, @".*""read"":""\b(?x)[0 - 9]{8}\b$"".*");
//string pattern = "\b\d{8}\b$";
Regex regex = new Regex(pattern);

    console.WriteLine((m.Groups[1].Value));
    console.WriteLine((n.Groups[1].Value));

我没有生成任何结果,这意味着控制台上没有打印任何内容。

您可以使用

var result = Regex.Match(realLine, @"\bread(?:ing)?\b.*?#\s*(\d+)")?.Groups[1].Value;

regex demo

正则表达式详细信息

  • \b - 单词边界
  • read(?:ing)? - readreading
  • \b - 单词边界
  • .*? - 除换行符外的零个或多个字符,尽可能少
  • # - 一个 # 字符
  • \s* - 零个或多个空格
  • (\d+) - 第 1 组:一个或多个数字。

实际上 return 组 1 值,使用 Regex.Match(realLine, @"\bread(?:ing)?\b.*?#\s*(\d+)")?,如果不匹配,将 return 为空字符串,否则,.Groups[1].Value当前匹配对象的 returned.