正则表达式 - 如何获取时间和日期并获得ISO8601时间戳

时间:2014-01-31 17:33:07

标签: regex

我有这个文字

2014-01-30 10:15 some text here
2014-01-30 10:20 some other text here

我需要一个与ISO 8601格式的时间戳组匹配的正则表达式。

必需的输出:

2014-01-30T10:15Z
2014-01-30T10:20Z

有了这个REGEX我无法得到我想要的东西,用'T'替换空格并在末尾添加'Z。

^(?<timestamp>\S+ \S+)

有谁知道如何解决这个问题?

---更新---

BTW,我正在使用http://rubular.com/来测试我的正则表达式

5 个答案:

答案 0 :(得分:2)

您可以将当前的正则表达式修改为:

^(\S+) (\S+).*

并替换为$1T$2Z

regex101 demo

答案 1 :(得分:1)

\d{4}-\d{2}-\d{2} \d{2}:\d{2}将匹配所需的格式 - 验证是另一个故事(如果您需要)。

您可以执行if (regex match) { replace " " with "T"; append "Z" }

之类的操作

如果这对您没有帮助,或者不清楚是因为您的问题含糊不清。

编辑:您没有指定您正在撰写的语言。这就是您替换的方式。

答案 2 :(得分:1)

在php中:

preg_replace('/^(\S+) (\S+).*/', "$1T$2Z", $str);

在perl:

$str =~ s/^(\S+) (\S+).*/$1T$2Z/;

在记事本++中

找到:^(\S+) (\S+).*
替换为:$1T$2Z

答案 3 :(得分:0)

使用:

(\d{4}-\d{2}-\d{2})( \d{2}:\d{2} )(?:.*)

您可以在组中捕获2014-01-30 10:15(并忽略另一组中的文本)。

然后你使用第二组(10:15)在开头添加'T',在结尾添加'Z'。

参见演示: http://rubular.com/r/4icGfcIixa

答案 4 :(得分:0)

正则表达式与语言略有不同,如果您告诉我们您正在使用哪种语言,它可能会有所帮助。 例如,在javascript中,您可以执行以下操作:

"2014-01-30 10:15 some text here".replace(/(\d{4}-\d{2}-\d{2})\s(\d{2}:\d{2})\s?.*/,"$1T$2Z")

字符串可以是变量。

如果您有多行文字,则应在正则表达式的末尾添加g

"2014-01-30 10:15 some text here\n2014-01-30 10:20 some other text here".replace(/.*(\d{4}-\d{2}-\d{2})\s(\d{2}:\d{2})\s?.*/g,"$1T$2Z")