给定以下 ISO 8601 格式的时间戳:
2012-04-21T01:56:00.581550
什么正则表达式会删除小数点和毫秒精度?换句话说,适用于上述内容并返回以下内容的正则表达式:
2012-04-21T01:56:00
这可能非常简单,但对正则表达式并不特别熟悉,我不确定如何解决该问题。提前感谢您的任何帮助。
给定以下 ISO 8601 格式的时间戳:
2012-04-21T01:56:00.581550
什么正则表达式会删除小数点和毫秒精度?换句话说,适用于上述内容并返回以下内容的正则表达式:
2012-04-21T01:56:00
这可能非常简单,但对正则表达式并不特别熟悉,我不确定如何解决该问题。提前感谢您的任何帮助。
如果您必须使用正则表达式,您可以使用"[.][0-9]+$"
并用空字符串替换它""
。更容易找到尾随'.'
,并在其索引处截断字符串。在 C# 中,这将是
myStr = myStr.Substring(0, myStr.LastIndexOf('.')-1);
为什么要使用正则表达式?使用字符串操作
在蟒蛇中:
>>> "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'
此正则表达式^[\w\-:]+
将仅匹配句点并将其排除在外。您可以使用它来查找所需的时间戳部分。
^
是字符串的开头。\w
是任何“词”。\-
包括连字符。:
包括冒号。[]
意味着只匹配这些字符。+
一个或多个实例。由于.
不包括句点 ( ),因此正则表达式将停止匹配。
s/\..*$//
看起来你可以假设只有一个点。上面的 sed 表达式找到一个点,然后替换该点之后的所有内容,直到换行符一无所有。
没有 sed:\..*$
用空字符串替换""
\.
是文字句点(必须转义它,因为.
意味着任何字符)
.*
表示任何和所有字符
$
表示行尾
代码:
$_ = '2012-04-21T01:56:00.581550';
s/\.\d*//;
print $_, "\n";
测试:
输出:
2012-04-21T01:56:00