【问题标题】:Regex to extract date time from given string正则表达式从给定字符串中提取日期时间
【发布时间】:2014-02-12 09:28:27
【问题描述】:

我想通过正则表达式从字符串中提取日期。

字符串:log-bb-2014-02-12-12-06-13-diag

怎么做?

【问题讨论】:

  • - 分割你的字符串并连接它们只包含数字的项目怎么样?
  • 只能通过正则表达式来做......
  • 到目前为止你的正则表达式如何?
  • regexone.com 是一个好的开始
  • @ManishTiwari 您提到的字符串中的日期应该是什么?是 2014 年 2 月 12 日还是 2013 年 6 月 12 日?

标签: c# regex


【解决方案1】:

从这里开始:

string s = "log-bb-2014-02-12-12-06-13-diag";
Regex r = new Regex(@"\d{4}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2}");
Match m = r.Match(s);
if(m.Success)
{
    DateTime dt = DateTime.ParseExact(m.Value, "yyyy-MM-dd-hh-mm-ss", CultureInfo.InvariantCulture);
}

【讨论】:

  • @"\d{4}(-\d\d){5}"
  • System.Globalization.CultureInfo.InvariantCulture
  • using语句为using System.Text.RegularExpressions;
【解决方案2】:

试试这个

(\d+)[-.\/](\d+)[-.\/](\d+)

Regex Demo.

它将匹配所有日期格式

【讨论】:

    【解决方案3】:

    考虑到您的日期只是 2014-02-12 即 2014 年 2 月 12 日。我编写了以下代码以使用 ruby​​ 提取该部分

    str = 'log-bb-2014-02-12-12-06-13-diag'
    
    str.scan(/\d{4}.\d{2}.\d{2}/)
    

    将返回["2014-02-12"]

    正则表达式写在两个/

    \d 表示任意整数, {} 带有任何整数的花括号表示重复的次数,. 表示任何字符。这里我用过-

    【讨论】:

      【解决方案4】:

      我已经检查了上述所有建议,但如果日期格式为“2000 年 11 月 11 日”,则没有一个适用。因为这是我需要为我的问题提取的常量格式,所以这里是它的解决方案。

      [A-Z]\w*\s\d*\W*\d{4}

      注意:此正则表达式专门用于以上述格式提取日期,如果顺序是随机的,例如。 “2000 年 11 月 11 日”。这个正则表达式不会给出合适的结果。 然而,对上述 re 稍作修改,就会得到正确的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多