2016-08-31 37 views
1

Ich möchte überprüfen, ob ein Jahr in einer Zeichenfolge gefunden wurde. So etwas wieJahr aus Zeichenfolge extrahieren, überprüfen, ob erfolgreich

if string.scan(/\d{4}/).first == TRUE 

zum Beispiel sieht eine Zeichenkette wie „gab es drei Erdbeben im Jahr 2007“

Irgendwelche Vorschläge?

+0

Was für Jahr? Oder irgendwelche 4 nachfolgenden Ziffern? –

+0

Bitte geben Sie einige Beispiele für die zu analysierenden Daten an. Ohne Kontext in den Daten ist es unmöglich, eine Lösung bereitzustellen. Wenn Sie das oben genannte für den folgenden Fall verwenden, würde dies zu falsch positiven Ergebnissen führen: "Der Code für den Safe lautet 0034". oder 'wir sollten treffen sind 0800 für Kaffee' – ABrowne

+0

Vielen Dank für die schnelle Antwort! In meinem Fall sind falsche Positive kein so großes Problem, da ich erwarte, dass sie aufgrund der Art der Daten nicht auftreten. Ich habe meinen Code aktualisiert, um ein Beispiel für die Daten zu geben, die ich analysiere – AaronDT

Antwort

2

Wenn Sie eigenständigen 4-stellige Zeichenfolge übereinstimmen sollen, können Sie einen regulären Ausdruck mit Wortgrenzen beachten:

!('It is 2016 now.' =~ /\b\d{4}\b/).nil? # => true 

oder - eine reale Welt Probe Nutzung:

if string =~ /\b\d{4}\b/ 

Die \b\d{4}\b paßt zu jedem 4 Ziffern, denen keine Wortzeichen (Ziffern, Buchstaben oder Unterstriche) vorangestellt oder gefolgt werden, so dass es in 02312345 keine Übereinstimmung gibt.

Wenn Sie das aktuelle Jahrhundert oder das 20. Jahrhundert präzisieren möchten, können Sie auch /\b(?:19|20)\d{2}\b/ Regex verwenden.

Um die Ziffern zu extrahieren, verwenden Sie s[/\b\d{4}\b/].

'It was in 2015/16.'[/\b\d{4}\b/] # => 2015 

Siehe Ruby demo

+0

Vielen Dank, das ist großartig! Wie würde ich den Fall einbeziehen, in dem ich ein Jahr als "2014/15" habe und nur "2014" extrahieren möchte? – AaronDT

+0

Vielen Dank! Benütze ich immer noch die .scan? d.h. .scan (s [/ \ b \ d {4} \ b /])? – AaronDT

+0

Siehe https://ideone.com/Md0Msr: '" 1948, 2945 und 3456 sind Jahre hier. "Scan (/ \ b \ d {4} \ b /)' -> '1948',' 2945', '3456' –

Verwandte Themen