【问题标题】:Regex, extract date from a file name正则表达式,从文件名中提取日期
【发布时间】:2021-04-09 08:45:06
【问题描述】:

示例文本是:

Statement_10125229_20170807.pdf

我想知道日期,20170807

我能够使用 (?<=_).*?(?=_) = 10125229 提取语句 ID。 现在我想提取日期,我已经尝试过(?<=_)\d*,但我仍然得到了 Statement ID。

【问题讨论】:

  • 试试(?<=_)\d+(?=\.),或者like this ((?<=_)[^_]*(?=\.pdf))。
  • 除了正则表达式,你也可以简单地拆分它。请同时添加您的编程语言(如果有)。
  • 如果日期始终为 8 位数字,并使用不考虑下划线的捕获组 _(\d{8})\.pdf 或非常广泛的匹配 \B\d{8}\b
  • @WiktorStribiżew 我试过你的答案,我能得到日期。 (Jan) 语言将是 C#。 (第四只鸟)非常广泛的匹配也有效。

标签: c# regex


【解决方案1】:

一般来说,(?<=_)\d+(?=\.)(?<=_)[^_]*(?=\.pdf) would solve 您的问题。 (?<=_)\d+(?=\.) 模式匹配一​​个或多个前面紧跟 _ 并紧跟 . 的数字。 (?<=_)[^_]*(?=\.pdf) 模式匹配除 _ 之外的任何零个或多个字符,这些字符前面紧跟 _,紧跟 .pdf

但是,在 C# 中,您实际上可以在不使用正则表达式的情况下获得所需的子字符串。你可以使用

var text = "Statement_10125229_20170807.pdf";
var result = Path.GetFileNameWithoutExtension(text).Split('_').LastOrDefault();

使用正则表达式,您还可以采用捕获方法:

var result = Regex.Match(text, @"_(\d+)\.pdf$")?.Groups[1].Value;

参见C# demo online,这两种方法都会产生20170807

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多