正则表达式以不同格式捕获时间戳

时间:2016-04-27 08:06:12

标签: .net regex replace nintex-workflow

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

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

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

我可以发布我所拥有的代码的每一步但是它会真的膨胀这篇文章。 对于开始日期和时间,我执行以下操作

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

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

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

我真的希望尽可能减少这一点。我试图实现这种方法Regex for capturing different date formats但是我对Regex并不熟悉并将项目拼凑在一起直到我开始工作。

由于

其他信息

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

1 个答案:

答案 0 :(得分: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

请参阅regex demo

重点是匹配并捕获我们需要的东西,并在替换模式中借助反向引用($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+ whitepsaces,文字-和0+空白
  • (\d{2})\s*(\d{2}):?(\d{2}Z)\s* - 见上文(第4,5,6组)
  • (\‌​w+) - 1个字符(字母,数字或下划线)(第7组)
  • \s* - 0+ whitepsaces
  • (\d{1,2}) - 1位或2位数(第8组)
  • $ - 字符串结尾