我有这个文字
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/来测试我的正则表达式
答案 0 :(得分:2)
答案 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'。
答案 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")