Sin pasar por todo el rango de caracteres Unicode, ¿cómo puedo obtener una lista de caracteres que tengan una propiedad determinada? En particular, quiero una lista de todos los caracteres que son dígitos (es decir, los que coinciden con /\d/
). Miré Unicode::UCD
, y es útil para determinar las propiedades de un personaje dado, pero no parece haber una manera de obtener una lista de caracteres que tienen una propiedad fuera de ella.¿Cómo obtengo una lista de todos los caracteres Unicode que tienen una propiedad determinada?
Respuesta
La lista de caracteres Unicode para cada clase se genera a partir de la especificación Unicode al compilar Perl, y se almacena normalmente en/usr/lib/perl-YOURPERLVERSION/unicore/lib/gc_sc/
Por ejemplo, la lista de rangos de caracteres Unicode que coinciden con IsDigit (alias \ d) se almacena en el archivo /usr/lib/perl-YOURPERLVERSION/unicore/lib/gc_sc/Digit.pl
cuyos caracteres/\ d/coinciden depende totalmente de su implementación de expresiones regulares (aunque se garantizan los estándares 0-9). En el caso de perl, el perl locale utilizado define qué caracteres se consideran alfabéticos y dígitos.
Perl transforma cadenas en UTF-8 antes de ejecutarlos a través del motor de expresiones regulares. Lo único que afecta a la configuración regional de Perl es cómo una cadena de bytes sin formato se transforma en utf8. Una vez que una cadena está en utf8, perl siempre usará la misma definición de IsDigit, independientemente de la configuración regional. – tetromino
No hay forma de hacerlo sin iterar a través de todos los personajes. (si crea una cadena enorme con todas ellas y usa una expresión regular, igual debe hacer el ciclo al menos una vez para crear la cadena).
Afortunadamente, parte del proceso de compilación de Perl crea un conjunto de archivos bajo 'unicore' en uno de los directorios lib que ya tienen mucho trabajo por hacer. No sé si son oficiales o no, tengo una pregunta en la lista de Perl 5 Porters para saber si es seguro usarlos. –
Incluso mejor que unicore/lib/gc_sc/Digit.pl
es unicore/To/Digit.pl
. Es un mapeo directo de los caracteres de dígitos Unicode (bueno, realmente sus desplazamientos) a sus valores numéricos. Esto significa que en lugar de:
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/;
}
puedo decir:
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 aún mejor:
my @digits;
for (split "\n", require "unicore/To/Digit.pl") {
my ($ord, $val) = split;
$digits[$val] .= "\\x{$ord}";
}
@digits = map { qr/[$_]/ } @digits;
- 1. tienen una URL que acepta todos los caracteres
- 2. ¿Cómo obtengo todas las instancias de todos los tipos cargados que implementan una interfaz determinada?
- 3. ¿Cómo obtengo una lista de todos los ensamblajes cargados actualmente?
- 4. ¿Cómo obtengo una lista de todos los caracteres imprimibles en C#?
- 5. Lista de caracteres alfabéticos Unicode
- 6. ¿Cómo obtengo una lista de todos los esquemas en una base de datos del servidor Sql?
- 7. Generar una lista de caracteres Unicode en un bucle for
- 8. ¿Cómo encontrar todos los subconjuntos posibles de una matriz determinada?
- 9. ¿Cómo obtengo una lista de todos los objetos HttpSession en una aplicación web?
- 10. Borrar todos mis NSUserDefaults que comienzan con una determinada palabra
- 11. ¿Dónde puedo obtener una lista de caracteres Unicode por clase?
- 12. ¿Cómo crear una lista con los caracteres de una cadena?
- 13. Java: ¿cómo obtengo todos los valores seleccionados de una JList?
- 14. ¿Obtiene todos los archivos de VSS para una fecha determinada?
- 15. ¿Cómo obtengo una lista de todos los archivos no versionados de SVN?
- 16. Magento - ¿Cómo obtengo una lista de todos los países permitidos en el conjunto de opciones?
- 17. ¿Cómo obtengo una lista de todos los tipos cargados en C#?
- 18. Eliminar todos los elementos de una lista
- 19. Componer una lista de todos los pares
- 20. (Phyton) Problemas con los directorios que tienen caracteres especiales
- 21. En Perforce, ¿cómo obtengo una lista de los archivos desprotegidos?
- 22. Cómo eliminar todos los caracteres de una cadena
- 23. Devolviendo los primeros N caracteres de una cadena Unicode
- 24. Url caracteres Unicode que codifican
- 25. ¿Cómo puedo hacer que eclipse imprima caracteres extraños en Unicode?
- 26. ¿Cómo se eliminan todos los caracteres alfabéticos de una cadena?
- 27. python: cómo tener una propiedad y con una función setter que detecta todos los cambios que ocurren con el valor
- 28. ¿Cómo puedo hacer que mi script PHP se ejecute a una hora determinada todos los días?
- 29. ¿Hay una lista de rango de codificación Unicode para los caracteres Emoji?
- 30. ¿Cómo decirle a ABPeoplePickerNavigationController que haga una lista solo de los contactos que tienen una dirección de correo electrónico?
Gracias, esto es casi exactamente lo que estaba buscando. Todavía tendré un bucle sobre ellos para construir una lista, pero al menos eso no tomará para siempre y un día. –