Nel caso in cui tu fossi molto preoccupato per i personaggi nazionali e il trattamento preciso delle classi di caratteri Unicode, l'unica soluzione che sono riuscito a trovare finora è la regex
libreria Python . Entrambi grep
e Perl
(con mia grande sorpresa!) Non hanno fatto bene il lavoro.
Così, l'espressione regolare si sono dopo è questo: \p{L}
. Questa è nota come versione abbreviata della proprietà Unicode, la versione completa è \p{Letter}
o anche p\{General_Category=Letter}
. Letter
è di per sé una classe composita, ma non entrerò nei dettagli, il miglior riferimento che ho potuto trovare sull'argomento è qui .
La libreria Python non è integrata nel linguaggio (è un'alternativa alla re
libreria integrata ). Quindi, dovresti installarlo, ad esempio:
# pip install regex
Quindi, potresti usarlo in questo modo:
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'>
>>>
Puoi anche mettere questo script da qualche parte dove puoi accedervi:
#!/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
E chiamalo da Emacs in questo modo (supponi di aver salvato questo script in ~/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)))
۱۲۳۴۵۶۷۸۹۰
ma ci sono alcuni aspetti negativi, ad esempio l'arabo o l'ebraico Alef:א
,ا
.