1

我的报告中有不同的时间格式。我正在尝试标准化格式。到目前为止我看到的两个如下。

3. When: 150845Z - 161045Z Jan 16
When: 15 08:45Z - 16 10:45Z Jan 16

我的目标是将数据从上述输入转换为以下

Start date and time 01/15/2016 08:45
End date and time 01/16/2016 10:45

我有多个捕获组和拆分来实现这一点,老实说,它相当大,我认为它可以简化。

我可以发布我拥有的每一步代码,但是它确实会使这篇文章变得臃肿。对于开始日期和时间,我执行以下操作

(?s)(?<=^.When:\s)[a-zA-Z0-9]+

对于结束日期和时间,我执行以下操作

When:.+(?<=- )(\w.*)

我真的很想尽可能减少这种情况。我尝试实现此方法Regex 来捕获不同的日期格式,但是我对 Regex 真的很陌生,并且将项目拼凑在一起,直到我让它工作为止。

谢谢

附加信息

我目前必须使用 Nintex Workflows 来转换数据。我想在之后开始捕获,When:\s然后我可以用它[, :]来删除剩余的空格和冒号。这将使数据以我可以操作的格式保留。

4

1 回答 1

1

您可以使用

^.*?When:\s*(\d{2})\s*(\d{2}):?(\d{2}Z)\s*-\s*(\d{2})\s*(\d{2}):?(\d{2}Z)\s*(\‌​w+)\s*(\d{1,2})$

并替换为$1$2$3$4$5$6$7$8.

查看正则表达式演示

关键是匹配和捕获我们需要的内容,并$n在替换模式中的反向引用(s)的帮助下重新插入这些捕获的文本,我们刚刚匹配的那些部分将从结果字符串中删除。

这里有一些更多细节供您稍后调整模式:

  • ^- 字符串/行的开头(不知道该工具是否允许跨行匹配)
  • .*?- 尽可能少地匹配除换行符以外的 0+ 个字符,直到第一个
  • When:- 文字字符串When:
  • \s*- 0+ 空白符号
  • (\d{2})- 2 位数字(第 1 组)
  • \s*- 0+ 空白符号
  • (\d{2})- 2 位数字(第 2 组)
  • :?- 可选的:
  • (\d{2}Z) - 2 位数字 + Z(第 3 组)
  • \s*-\s*- 0+ 空格、文字-和 0+ 空格
  • (\d{2})\s*(\d{2}):?(\d{2}Z)\s*- 见上文(第 4、5、6 组)
  • (\‌​w+)- 1+ 个单词字符(字母、数字或下划线)(第 7 组)
  • \s*- 0+ 白色空间
  • (\d{1,2})- 1 位或 2 位数字(第 8 组)
  • $- 字符串结束
于 2016-04-27T09:02:13.020 回答