2017-03-21 13 views
0

[02/24/2016][03:37:27.996]からタイムスタンプを抽出する必要があります。例えば正規表現を使用してタイムスタンプを抽出する方法

、マッチング:

[02/24/2016][03:37:27.996] 

を抽出する必要があります

02/24/2016 03:37:27.996 

これは別に、日付と時刻を返します。

\[(?<date>[^\]]*)\]\[(?<time>[^\]]*)\] 

これはあなたの容易な参照のためRubular exampleです。

私はこれらの2つのグループ、日付と時刻をタイムスタンプに結合する方法を探しています。

+0

これは、不要なテキストを置き換えるか、いくつかのコードを使用して2つのグループの内容を連結することで達成されます。隣接していない2つのテキスト部分にマッチする*正規表現パターンを使うことはできません。 –

+0

正規表現からしか達成できない方法はありますか? –

+0

[書き込むことができないため、いくつかのプレースホルダテキスト] No. –

答えて

1

正規表現の仕組みのため、パターンを使用して情報を1つの結果または文字列として抽出することはできません。

あなたのような使用することができ
'[02/24/2016][03:37:27.996]'.match(/\[([^\]]+)\]\[([^\]]+)\]/).captures # => ["02/24/2016", "03:37:27.996"] 

'[02/24/2016][03:37:27.996]'.match(/\[([^\]]+)\]\[([^\]]+)\]/).captures.join(' ') # => "02/24/2016 03:37:27.996" 

または介在"[]"文字を含む1つのキャプチャ:あなたは、2つのキャプチャを取得しますいずれか

'[02/24/2016][03:37:27.996]'.match(/\[([^\]]+\]\[[^\]]+)\]/).captures # => ["02/24/2016][03:37:27.996"] 

あなたはそれを他の方法を行うことができますしかし:

'[02/24/2016][03:37:27.996]'[1..-2].sub('][', ' ') # => "02/24/2016 03:37:27.996" 

[[1, 10], [13, 12]].map {|s, l| '[02/24/2016][03:37:27.996]'[s, l] }.join(' ') # => "02/24/2016 03:37:27.996" 
'[02/24/2016][03:37:27.996]'.tr('[]', ' ').strip.squeeze(' ') # => "02/24/2016 03:37:27.996" 
'[02/24/2016][03:37:27.996]'.gsub(/[\[\]]+/, ' ').strip # => "02/24/2016 03:37:27.996" 
'[02/24/2016][03:37:27.996]'.scan(/[\d\/:.]+/).join(' ') # => "02/24/2016 03:37:27.996" 

の人が正規表現について学ぶとき、すべてがそれらを使用するのに最適な機会のように見える、すべてがヒットするチャンスです:私はそれを行うだろうかである、または、簡単なスライスとsubを使用して、

正規表現ハンマーの問題。残念ながらそれは真実に近いものではありません。彼らは強力ですが、不適切に使用されるとコードが遅くなり、非常に微妙なバグやロジックホールが発生し、デバッグが難しくなります。なぜなら、複雑になるほどコードが複雑になるからです。それらをシンプルに保つか、それらをアセンブルするコードを使用して生成する方法を学んでください。

関連する問題