Senza eseguire il ciclo sull'intero intervallo di caratteri Unicode, come è possibile ottenere un elenco di caratteri con una determinata proprietà? In particolare voglio un elenco di tutti i caratteri che sono cifre (ad esempio quelli che corrispondono a /\d/
). Ho guardato a Unicode::UCD
ed è utile per determinare le proprietà di un determinato carattere, ma non sembra essere un modo per ottenere un elenco di caratteri che hanno una proprietà al di fuori di esso.Come si ottiene un elenco di tutti i caratteri Unicode con una determinata proprietà?
risposta
L'elenco dei caratteri Unicode per ogni classe viene generato dalla specifica Unicode quando si compila il Perl, ed è tipicamente memorizzati in/usr/lib/perl-YOURPERLVERSION/unicore/lib/gc_sc/
Ad esempio, l'elenco degli intervalli di caratteri Unicode che corrispondono a IsDigit (aka \ d) è archiviato nel file /usr/lib/perl-YOURPERLVERSION/unicore/lib/gc_sc/Digit.pl
quali caratteri/\ d/corrisponde dipende interamente dall'implementazione regexp (sebbene siano garantiti lo standard 0-9). Nel caso di perl, il codice perl locale utilizzato definisce quali caratteri sono considerati alfabetici e cifre.
Perl trasforma stringhe in utf8 prima di eseguirli attraverso il motore regex. L'unica cosa che influenza le impostazioni locali di perl è come una stringa di byte grezza viene trasformata in utf8. Una volta che una stringa è in utf8, perl utilizzerà sempre la stessa definizione di IsDigit, indipendentemente dalle impostazioni locali. – tetromino
Non c'è modo di farlo senza iterare attraverso tutti i personaggi. (se crei una stringa enorme con tutti loro e usi una regexp devi ancora fare il ciclo almeno una volta, per creare la stringa).
Fortunatamente parte del Perl processo di generazione crea una serie di file sotto 'unicore' in una delle directory lib che hanno già un sacco di lavoro fatto per voi. Non so se sono ufficiali o meno, ho una domanda nella lista Perl 5 Porters per scoprire se è sicuro usarli. –
Anche meglio di unicore/lib/gc_sc/Digit.pl
è unicore/To/Digit.pl
. È una mappatura diretta dei caratteri numerici Unicode (beh, in realtà i loro offset) ai loro valori numerici. Ciò significa che invece di:
use Unicode::Digits qw/digit_to_int/;
my @digits;
for (split "\n", require "unicore/lib/gc_sc/Digit.pl") {
my ($s, $e) = map hex, split;
for (my $ord = $s; $ord <= $e; $ord++) {
my $chr = chr $ord;
push @{$digits[digits_to_int $chr]}, $chr;
}
}
for my $i (0 .. 9) {
my $re = join '', "[", @{$digits[$i]}, "]";
$digits[$i] = qr/$re/;
}
posso dire:
my @digits;
for (split "\n", require "unicore/To/Digit.pl") {
my ($ord, $val) = split;
my $chr = chr hex $ord;
push @{$digits[$val]}, $chr;
}
for my $i (0 .. 9) {
my $re = join '', "[", @{$digits[$i]}, "]";
$digits[$i] = qr/$re/;
}
O ancora meglio:
my @digits;
for (split "\n", require "unicore/To/Digit.pl") {
my ($ord, $val) = split;
$digits[$val] .= "\\x{$ord}";
}
@digits = map { qr/[$_]/ } @digits;
- 1. Elenco di caratteri alfabetici Unicode
- 2. Come si ottiene un array di punti di codice Unicode da una stringa .NET?
- 3. Generare un elenco di caratteri Unicode in un ciclo for
- 4. Come sostituire i caratteri Unicode con ASCII
- 5. Ottiene i pulsanti di opzione selezionati di una determinata classe
- 6. Come sostituire i caratteri unicode nella stringa con qualcos'altro python?
- 7. Come posso ottenere un elenco di tutti i file con una determinata estensione da una directory specifica?
- 8. Come si convertono i caratteri unicode in float in Python?
- 9. MySQL ottiene tutti i caratteri prima del carattere specifico
- 10. Come si convertono i caratteri stringa in un elenco?
- 11. Magento ottiene tutti i prodotti in una determinata categoria ordinata dal campo "Posizione"
- 12. Come si ottiene la larghezza di visualizzazione dei caratteri Unicode combinati in Python 3?
- 13. Come posso rilevare i caratteri unicode in una stringa Java?
- 14. Come si ottiene un elenco di tutti gli oggetti HttpSession in un'applicazione Web?
- 15. Come si ottiene il valore di una proprietà da PropertyInfo?
- 16. Come si ottiene un nome di proprietà C# come una stringa con riflessione?
- 17. Come abbinare i caratteri unicode in Java
- 18. Come abbinare i caratteri unicode con boost :: spirit?
- 19. Come specificare un intervallo di caratteri Unicode
- 20. Come si ottiene il conteggio di una determinata parola in un dato PDF?
- 21. Come si ottiene un elenco di indici di elementi diversi da zero in un elenco?
- 22. Come utilizzare i caratteri Unicode in una stringa python
- 23. Elenco di tutti i repository SVN
- 24. Come posso sostituire i caratteri Unicode con ASCII in Perl?
- 25. Come si selezionano tutti i tag ID che contengono una determinata stringa in javascript?
- 26. Stampa caratteri Unicode PHP
- 27. Esiste un elenco di intervalli di codifica Unicode per i caratteri Emoji?
- 28. Creazione di nomi file con caratteri Unicode
- 29. Come gestire i caratteri Unicode (non ASCII) in Python?
- 30. Rimuovere i caratteri Unicode all'interno di vari intervalli in javascript
Grazie, questo è quasi esattamente quello che stavo cercando. Avrò ancora un ciclo su di loro per costruire una lista, ma almeno non ci vorrà per sempre e un giorno. –