Falls Sie sehr besorgt über nationale Zeichen und die genaue Behandlung von Unicode-Zeichenklassen waren, ist die einzige Lösung, die ich bisher finden konnte, die Python- regex
Bibliothek . Beide grep
und Perl
(zu meiner großen Überraschung!) Haben den Job nicht richtig gemacht.
Der reguläre Ausdruck, nach dem Sie suchen, lautet also : \p{L}
. Dies ist als Unicode-Eigenschafts-Kurzversion bekannt, die Vollversion ist \p{Letter}
oder sogar p\{General_Category=Letter}
. Letter
ist selbst eine zusammengesetzte Klasse, aber ich werde nicht auf Details eingehen. Die beste Referenz, die ich zu diesem Thema finden konnte, ist hier .
Die Python-Bibliothek ist nicht in die Sprache integriert (eine Alternative zur integrierten re
Bibliothek). Sie müssten es also installieren, zum Beispiel:
# pip install regex
Dann könnten Sie es so verwenden:
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'>
>>>
Sie können dieses Skript auch an einer Stelle ablegen, an der Sie darauf zugreifen können:
#!/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
Und nennen Sie es von Emacs so (nehmen Sie an, Sie haben dieses Skript in gespeichert ~/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)))
۱۲۳۴۵۶۷۸۹۰
aber es gibt einige echte Negative, z. B. Arabisch oder Hebräisch Alef:א
,ا
.