0

给定以下 ISO 8601 格式的时间戳:

2012-04-21T01:56:00.581550

什么正则表达式会删除小数点和毫秒精度?换句话说,适用于上述内容并返回以下内容的正则表达式:

2012-04-21T01:56:00

这可能非常简单,但对正则表达式并不特别熟悉,我不确定如何解决该问题。提前感谢您的任何帮助。

4

5 回答 5

3

如果您必须使用正则表达式,您可以使用"[.][0-9]+$"并用空字符串替换它""。更容易找到尾随'.',并在其索引处截断字符串。在 C# 中,这将是

myStr = myStr.Substring(0, myStr.LastIndexOf('.')-1);
于 2012-04-21T00:05:32.307 回答
2

为什么要使用正则表达式?使用字符串操作

在蟒蛇中:

>>> "2012-04-21T01:56:00.581550".split(".")
['2012-04-21T01:56:00', '581550']
>>> "2012-04-21T01:56:00.581550".split(".")[0]
'2012-04-21T01:56:00'
于 2012-04-21T00:23:20.067 回答
1

此正则表达式^[\w\-:]+将仅匹配句点并将其排除在外。您可以使用它来查找所需的时间戳部分。

  • ^是字符串的开头。
  • \w是任何“词”。
  • \-包括连字符。
  • :包括冒号。
  • 这些放置在[]意味着只匹配这些字符。
  • 表示匹配这些字符的+一个或多个实例。

由于.不包括句点 ( ),因此正则表达式将停止匹配。

于 2012-04-21T00:16:48.303 回答
0
s/\..*$//

看起来你可以假设只有一个点。上面的 sed 表达式找到一个点,然后替换该点之后的所有内容,直到换行符一无所有。

没有 sed:\..*$用空字符串替换""

\.是文字句点(必须转义它,因为.意味着任何字符)

.*表示任何和所有字符

$表示行尾

于 2012-04-21T00:05:55.017 回答
0

代码:

$_ = '2012-04-21T01:56:00.581550';
s/\.\d*//;
print $_, "\n";

测试:

http://ideone.com/52hij

输出:

2012-04-21T01:56:00
于 2012-04-21T00:49:11.837 回答