2017-05-31 3 views
1

Mit Ruby 2.4, wie zähle ich die Anzahl der Instanzen eines Unicode-Buchstaben in meiner Zeichenfolge? Ich versuche:Wie zählen Instanzen von Unicode-Buchstaben in meiner Zeichenfolge

2.4.0 :009 > string = "a" 
=> "a" 
2.4.0 :010 > string.count('\p{L}') 
=> 0 

aber es 0 anzeigt, und es sollte 1.

zurückkehren ich den obigen Ausdruck anstatt „az“ verwenden wollen, weil „az“ nicht Dinge abdecken wie akzentuierte e's.

+1

Können Sie versuchen, mit "scan" und "count"? 'string.scan (/ \ p {L} /). count' –

+0

Das gibt das erwartete Ergebnis zurück. Danke – Dave

+0

"Es sollte 1 zurückgeben" - Warum? Laut der Dokumentation zählen Sie die Anzahl von "", "P", "", "L" und "". Es gibt keine, ergo, es sollte "0" zurückgeben. –

Antwort

0

Sie könnten versuchen, String#scan verwenden, vorbei an Ihre \p{L} regex, und dann ist die Kette die count Methode:

string = "aá" 
p string.scan(/\p{L}/).count 
# 2 
0

Dies ist ein Weg, dass keine temporäre Array schafft.

str = "Même temps l'année prochaine." 

str.size - str.gsub(/[[:alpha:]]/, '').size 
    #=> 24 

Der Klammerausdruck POSIX [[:alpha:]] ist die gleiche wie \p{Alpha} (aka \p{L}). Beachten Sie, dass

str.gsub(/[[:alpha:]]/, '') 
    #=> " ' ." 
Verwandte Themen