0

以下のISO8601形式のタイムスタンプを指定します。

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

なぜ正規表現を使いたいのですか?文字列演算を使用する

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'
于 2012-04-21T00:23:20.067 に答える
1

この正規表現^[\w\-:]+は、期間までのみ一致し、それを除外します。これを使用して、必要なタイムスタンプの部分を見つけることができます。

  • ^文字列の始まりです。
  • \w任意の「単語」です。
  • \-ハイフンを含みます。
  • :コロンを含みます。
  • これらが配置される[]ということは、これらの文字にのみ一致することを意味します。
  • それらの+文字の1つまたは複数のインスタンスに一致することを意味します。

ピリオド(.)が含まれていないため、それに達すると正規表現は一致を停止します。

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

ドットは1つだけだと想定できるようです。上記の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 に答える