我的报告中有不同的时间格式。我正在尝试标准化格式。我到目前为止看到的两个如下:
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
之后开始捕获,然后我可以使用[, :]
删除剩余的空格和冒号。这将使数据保持我可以操作的格式。
答案 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组)$
- 字符串结尾