Cómo puedo determinar si el carácter actual es una letra (un carácter alfabético) (es decir, pertenece a la clase de sintaxis [:alpha:]
en las nociones de expresiones regulares). Me gustaría escribir una función simple como la siguiente:
(defun test-letter () (interactive)
(if char-after-is-a-letter
(message "This is a letter")
(message "This is not a letter")
)
)
Actualización
Desafortunadamente, mi suposición sobre la equivalencia de la clase de las letras y la clase de sintaxis [:alpha:]
parece ser falsa.
fuente
۱۲۳۴۵۶۷۸۹۰
pero hay algunos negativos verdaderos, por ejemplo, árabe o hebreo Alef:א
,ا
.五
se considera como el número5
en japonés. Su código considera esto una carta. Tal vez es una letra (como en número romanov
). Quizás alguien que esté familiarizado con el japonés pueda verificar esto.五
es como la palabra inglesafive
, entonces es una letra. Cuando escriben el número 5 en lugar de la palabra cinco, usan5
igual que el inglés.EDITAR: Esta respuesta debería ser perfectamente válida en 25.5 (donde se había solucionado el error ). Para versiones anteriores, use la otra opción .
Esto debería decirle si el carácter actual es una letra, y debería funcionar en cualquier idioma.
fuente
looking-at-p
uso en su solución ylooking-at
la otra respuesta.looking-at-p
no establece datos de coincidencia.match-string
(y sus muchos hermanos) devolverá el resultado de la búsqueda. Mientras tanto, con la versión no predicada, match-string devolverá el resultado de la coincidencia de mirar.Creo que puedes salirte con la tuya:
Actualizar
Esto es menos eficiente, pero más cercano a lo que quieres:
fuente
۹
(es decir, el dígito indio 9) o٪
como una letra.ζ
oα
), pero la actualización no.En caso de que estuviera muy preocupado por los caracteres nacionales y el tratamiento preciso de las clases de caracteres Unicode, la única solución que pude encontrar hasta ahora es la
regex
biblioteca Python . Ambosgrep
yPerl
(¡para mi sorpresa!) No hicieron el trabajo correctamente.Por lo tanto, la expresión regular que está después es la siguiente:
\p{L}
. Esto se conoce como versión abreviada de la propiedad Unicode, la versión completa es\p{Letter}
o inclusop\{General_Category=Letter}
.Letter
es en sí misma una clase compuesta, pero no entraré en detalles, la mejor referencia que pude encontrar sobre el tema está aquí .La biblioteca de Python no está integrada en el lenguaje (es una alternativa a la
re
biblioteca integrada ). Entonces, necesitaría instalarlo, por ejemplo:Entonces, puedes usarlo así:
También podría colocar este script en algún lugar donde pueda acceder a él:
Y llámelo desde Emacs así (supongamos que guardó este script en
~/bin
):fuente