2009-03-29 12 views
1

Ich habe eine Zeichenfolge "Suchergebnis: 16143 Ergebnisse gefunden", und ich muss 16143 daraus abrufen.Abrufen der Nummer aus dem Zeichenfolgenmuster mit regulären Ausdruck

ich in Ruby bin Codierung und ich weiß, das sauber wäre es Regex zu erhalten (wie anhand von Trennzeichen Splitting String opponiert)

Wie würde ich die Nummer aus dieser Zeichenfolge in Ruby abrufen?

+0

Sind Sie zuversichtlich, dass die Zahl nicht-negat sein ive, enthält keine nicht-numerischen Zahlen und wird nicht in Exponentialschreibweise sein? –

Antwort

2

Ich bin auf der Syntax in Ruby nicht sicher, aber der reguläre Ausdruck wäre „(\ d +)“ eine Reihe von Ziffern der Größe bedeutet 1 oder Mehr. Sie können es versuchen, hier aus: http://www.rubular.com/

Aktualisiert: Ich glaube, die Syntax /(\d+)/.match(your_string)

+0

Beachten Sie, dass die Eingabe des \ d + in Klammern tatsächlich den Wert erfasst und nicht nur wahr oder falsch in Bezug auf die Übereinstimmung zurückgibt. – LaserJesus

+0

Vergessen Sie nicht, es in eine Ganzzahl zu konvertieren (Weder Ganzzahl (foo) noch foo.to_i ist perfekt, aber ich würde to_i vorschlagen, wenn Sie * wissen *, dass es eine Nummer ist). –

1

Dieser reguläre Ausdruck sollte es tun:

\d+ 
1

Für eine nicht reguläre Ausdrücke Ansatz:

irb(main):001:0> foo = "Search result:16143 Results found" 
=> "Search result:16143 Results found" 
irb(main):002:0> foo[foo.rindex(':')+1..foo.rindex(' Results')-1] 
=> "16143" 
1
# check that the string you have matches a regular expression 
if foo =~ /Search result:(\d+) Results found/ 
    # the first parenthesized term is put in $1 
    num_str = $1 
    puts "I found #{num_str}!" 
    # if you want to use the match as an integer, remember to use #to_i first 
    puts "One more would be #{num_str.to_i + 1}!" 
end 
8
> foo = "Search result:16143 Results found" 
=> "Search result:16143 Results found" 
> foo[/\d+/].to_i 
=> 16143 
+0

Dies ist die bevorzugte Methode zum Extrahieren aus einer Zeichenfolge basierend auf einem Regex-Muster. – Sim

0
> foo = "Search result:16143 Results found" 
=> "Search result:16143 Results found" 
> foo.scan(/\d/).to_i 
=> 16143 
Verwandte Themen