2017-03-21 22 views
0

Ich muss den Zeitstempel von [02/24/2016][03:37:27.996] extrahieren.So extrahieren Sie einen Zeitstempel mit einer Regex

Zum Beispiel: Passend zu

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

sollte extrahieren:

02/24/2016 03:37:27.996 

Dieses Datum und Uhrzeit separat zurückgibt:

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

Dies ist Rubular example für Ihre einfache Referenz .

Ich bin auf der Suche nach wie diese beiden Gruppen, Datum und Uhrzeit, in einen Zeitstempel zu kombinieren.

+0

Dies wird entweder durch Ersetzen des unnötigen Textes oder durch Verwendung von Code zum Verketten der beiden Gruppeninhalte erreicht. Sie können nicht einfach ein einzelnes Regex-Muster verwenden, um * zwei nicht benachbarte Textteile * zusammenzufassen. –

+0

gibt es keine Möglichkeit, nur aus Regex zu erreichen? –

+0

[ein Platzhaltertext, da Sie nicht einfach schreiben können ...] Nr. –

Antwort

1

Sie können ein Muster nicht zum Extrahieren der Informationen als ein Ergebnis oder eine Zeichenfolge verwenden, da reguläre Ausdrücke funktionieren. Sie erhalten entweder zwei Aufnahmen:

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

, die Sie wie verwenden:

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

oder ein Capture enthält die dazwischenliegenden "[]" Zeichen:

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

Sie können es andere Möglichkeiten, tun obwohl:

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

die eine einfache Scheibe und sub verwendet wird, ist, wie ich es tun würde, oder:

[[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" 

Wenn die Leute über reguläre Ausdrücke alles wie die perfekte Gelegenheit sieht lernen, sie zu benutzen, alles ist die Chance, die getroffen Problem mit dem regulären Ausdruck Hammer. Leider ist das nicht nah an der Wahrheit. Sie sind leistungsfähig, aber wenn sie nicht korrekt verwendet werden, können sie Ihren Code verlangsamen, sie können sehr subtile Fehler und logische Lücken einbringen, und sie können Ihren Code erheblich schwieriger zu debuggen machen, da sie, wenn sie komplexer werden, auch komplizierter werden. Halten Sie sie einfach für geistig gesund oder lernen Sie, wie Sie sie mit Code generieren, der sie für Sie zusammenstellt.

Verwandte Themen