2017-07-27 1 views

Antwort

2
r = /(?<=[[:alpha:]]) ?(?=\d)/ 

"Bar 01/12/15".split(r) 
    #=> ["Bar", "01/12/15"] 
"Foo02/15/87".split(r) 
    #=> ["Foo", "02/15/87"] 

Der reguläre Ausdruck liest

  • Spiel einen Brief in einem positiven Lookbehind
  • Spiel 0 oder 1 Leerzeichen
  • Übereinstimmung einer Ziffer in einem positiven Lookahead
1

Wenn Ihr String wird immer, dass TT/MM/JJ Format am Ende Sie eine Methode erstellen können, die die letzten 8 Zeichen aus dem String nimmt und beide Werte zurück (verbleibende Zeichenfolge und Datum) als ein Array, so etwas wie dieses:

def to_array(string) 
    date = string[-8..-1] 
    [string.delete(date).strip, date] 
end 

to_array(bar) 
#=> ["Bar", "01/12/15"] 

to_array(foo) 
# => ["Foo", "02/15/87"] 
0

Ihre variable bar = "Bar 01/12/15" umfasst einen Raum " "

Wenn varia ble foo sollte auch einen Raum einschließen, wie foo = "Foo 02/15/87"

Sie nur .split auf bar ohne Eingabe eines Trennzeichen verwenden können.

Es wird wieder ["Bar", "01/12/15"] (erinnern Sie Ihre Variable bar_array gleich darauf einzustellen.)

Allerdings, wenn Sie eine Zeichenfolge wie "1,2,3" haben, müssten Sie ein Trennzeichen eingeben ",": "1,2,3".split(",") um ["1","2","3"] zu bekommen. Ansonsten wird es zurückkehren ["1,2,3"]

1

Da die bereitgestellte Zeichenfolge (wie in Ihrem Beispiel):

  1. ein Wort und ein Datum (mit null oder mehr Räumen zwischen ihnen) Enthält
  2. Das Datum gebildet wird mit 8 Zeichen (d. h##/##/## Format)
  3. Das Datum am Ende der Schnur ist

Sie Folgendes tun können:

bar.sub(/(.{8})\z/, ' \1').split 
#=> ["Bar", "01/12/15"] 
  • sub(/(.{8})\z/, ' \1') einen Raum vor dem Datum hinzufügen wird
  • split wird geteilt die Zeichenfolge, in der ein Leerzeichen (oder mehr) gefunden wird
0

Wie über einen regulären Ausdruck das Datum Form passen und was auch immer, bevor es ist:

bar = "Bar 01/12/15" 
foo = "Foo02/15/87" 
pattern = /^(.*?)([0-9]{2}\/[0-9]{2}\/[0-9]{2})/ 

bar.scan(pattern).flatten.map(&:strip) 
=> ["Bar", "01/12/15"] 

foo.scan(pattern).flatten.map(&:strip) 
=> ["Foo", "02/15/87"] 
+0

Sie können alle nicht gewünschten Leerzeichen (wie in '" Bar "') entfernen, indem Sie '.map (&: strip)' hinzufügen. – Gerry

Verwandte Themen