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 . Ambos grep
y Perl
(¡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 incluso p\{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:
# pip install regex
Entonces, puedes usarlo así:
import regex
>>> regex.match(ur'\p{L}+', u'۱۲۳۴۵۶۷۸۹۰')
>>> regex.match(ur'\p{L}+', u'абвгд')
<regex.Match object; span=(0, 5), match=u'\u0430\u0431\u0432\u0433\u0434'>
>>> regex.match(ur'\p{L}+', u'123')
>>> regex.match(ur'\p{L}+', u'abcd')
<regex.Match object; span=(0, 4), match=u'abcd'>
>>>
También podría colocar este script en algún lugar donde pueda acceder a él:
#!/usr/bin/env python
import regex
import sys
if __name__ == "__main__":
for match in regex.finditer(ur'\p{L}+', sys.argv[1].decode('utf-8')):
print match.string
Y llámelo desde Emacs así (supongamos que guardó este script en ~/bin
):
(defun unicode-character-p ()
(interactive)
(let* ((current (char-after (point)))
(result (shell-command-to-string
(format "~/bin/is-character.py '%c'" current))))
(message
(if (string= result "") "Character %c isn't a letter"
"Character %c is a letter")
current)))
۱۲۳۴۵۶۷۸۹۰
pero hay algunos negativos verdaderos, por ejemplo, árabe o hebreo Alef:א
,ا
.