【问题标题】:RegEx to extract Date from time正则表达式从时间中提取日期
【发布时间】:2017-12-19 05:50:19
【问题描述】:

我有以下日期和时间,并希望使用 RegEx 将其转换为简单数字

我有什么:2017-11-02T04:00:00Z

我想将其转换为:20171102(包括月份/日期的前导零)

RegEx 可以做到这一点吗?只能在下班后使用 '^(.*?)-' 得到 '2017-'

似乎越来越难,非常感谢任何帮助

编辑:显示我在哪里尝试这个。我正在尝试在 Nintex for SharePoint 上执行此操作。但在此之前,我使用的是 www.regEx101.com 来验证

【问题讨论】:

  • 为什么不使用日期库?
  • 为什么不使用日期/时间解析模块呢?
  • 你在哪里尝试正则表达式?显示代码。
  • 添加了我想使用 RegEx 的地方
  • 只需将- 替换为空

标签: regex nintex-workflow


【解决方案1】:

将以下正则表达式与 替换 模板一起使用:

^(\d{4})-(\d{2})-(\d{2}).*

并提供

$1$2$3

作为替换模式。

详情

  • ^ - 字符串开头
  • (\d{4}) - 第 1 组(后来用替换模式中的 $1 反向引用引用):四位数字
  • - - 一个连字符
  • (\d{2}) - 第 1 组(后来用替换模式中的 $2 反向引用引用):两位数
  • - - 一个连字符
  • (\d{2}) - 第 3 组(后来用替换模式中的 $3 反向引用引用):两位数
  • .* - 字符串的其余部分。

请参阅regex demo。

【讨论】:

    【解决方案2】:

    ^\d{4}-\d{2}-\d{2}怎么样?

    这将完全匹配四位数字,后跟一个连字符,后跟 2 位数字,然后是另一个连字符,然后是另外 2 位数字。

    var str = "2017-11-02T04:00:00Z";
    var res = str.match(/^\d{4}-\d{2}-\d{2}/)[0];
    console.log(res);

    【讨论】:

    • 它适用于 regex101。但在 Ninex 上,答案似乎是“T04:00:00Z”。有什么想法吗?
    【解决方案3】:

    在正则表达式中无法从匹配组中排除字符,因此您必须使用三个匹配组。我使用命令行 sed 来试验正则表达式。这是一些输出来说明我的意思:

    $ echo '2017-11-02T04:00:00Z'|sed 's/^\([0-9]*\)-\([0-9]*\)-\([0-9]*\)T.*$/\1\2\3/'
    20171102
    

    此命令匹配单独捕获组中任意长度数字的每个序列,然后将整个字符串替换为三个组。您的语言实现此功能的方式会有所不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多