以下のISO8601形式のタイムスタンプを指定します。
2012-04-21T01:56:00.581550
どの正規表現が小数点とミリ秒の精度を削除しますか?つまり、上記に適用され、以下を返す正規表現:
2012-04-21T01:56:00
これはおそらく非常に単純ですが、正規表現に特に精通しているわけではありませんが、ソリューションへのアプローチ方法がわかりません。よろしくお願いします。
以下のISO8601形式のタイムスタンプを指定します。
2012-04-21T01:56:00.581550
どの正規表現が小数点とミリ秒の精度を削除しますか?つまり、上記に適用され、以下を返す正規表現:
2012-04-21T01:56:00
これはおそらく非常に単純ですが、正規表現に特に精通しているわけではありませんが、ソリューションへのアプローチ方法がわかりません。よろしくお願いします。
正規表現を使用する必要がある場合は、それを使用"[.][0-9]+$"
して空の文字列に置き換えることができます""
。末尾のを見つけて、'.'
そのインデックスで文字列を切り落とす方が簡単です。C#では、それは
myStr = myStr.Substring(0, myStr.LastIndexOf('.')-1);
なぜ正規表現を使いたいのですか?文字列演算を使用する
Pythonで:
>>> "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
任意の「単語」です。\-
ハイフンを含みます。:
コロンを含みます。[]
ということは、これらの文字にのみ一致することを意味します。+
文字の1つまたは複数のインスタンスに一致することを意味します。ピリオド(.
)が含まれていないため、それに達すると正規表現は一致を停止します。
s/\..*$//
ドットは1つだけだと想定できるようです。上記のsed式はドットを見つけ、そのドット以降の改行までのすべてを何も置き換えません。
sedなし:\..*$
空の文字列に置き換えます""
\.
.
はリテラルピリオドです(任意の文字を意味するため、エスケープする必要があります)
.*
すべての文字を意味します
$
行末を意味します
コード:
$_ = '2012-04-21T01:56:00.581550';
s/\.\d*//;
print $_, "\n";
テスト:
出力:
2012-04-21T01:56:00