Wie ich feststellen kann, ob das aktuelle Zeichen ein Buchstabe (ein alphabetisches Zeichen) ist (dh zur [:alpha:]
Syntaxklasse in regulären Ausdrücken gehört). Ich möchte eine einfache Funktion wie folgt schreiben:
(defun test-letter () (interactive)
(if char-after-is-a-letter
(message "This is a letter")
(message "This is not a letter")
)
)
Update
Leider [:alpha:]
scheint meine Annahme über die Äquivalenz der Buchstabenklasse und der Syntaxklasse falsch zu sein.
elisp
characters
Name
quelle
quelle
۱۲۳۴۵۶۷۸۹۰
aber es gibt einige echte Negative, z. B. Arabisch oder Hebräisch Alef:א
,ا
.五
wird als die Nummer5
in Japanisch betrachtet. Ihr Code betrachtet dies als einen Brief. Vielleicht ist es ein Buchstabe (wie in römischer Zahlv
). Vielleicht kann jemand, der mit Japanisch vertraut ist, dies überprüfen.五
ist wie das englische Wortfive
, also ist es ein Buchstabe. Wenn sie die Nummer 5 anstelle des Wortes fünf schreiben, verwenden sie5
genau wie Englisch.BEARBEITEN: Diese Antwort sollte in 25.5 (wo der Fehler behoben wurde) vollkommen gültig sein . Verwenden Sie für ältere Versionen die andere Option .
Dies sollte Ihnen sagen, ob das aktuelle Zeichen ein Buchstabe ist und in jeder Sprache funktionieren sollte.
quelle
looking-at-p
Verwendung in Ihrer Lösung undlooking-at
der anderen Antwort.looking-at-p
keine Übereinstimmungsdaten festgelegt werden.match-string
(und seine vielen Geschwister), wird das Ergebnis der Suche zurückgegeben. In der Nicht-Prädikat-Version gibt die Übereinstimmungszeichenfolge das Ergebnis der betrachteten Übereinstimmung zurück.Ich denke, Sie können damit durchkommen:
Aktualisieren
Dies ist weniger effizient, aber näher an dem, was Sie wollen:
quelle
۹
(dh die indische Ziffer 9) oder٪
als Buchstabe.ζ
oderα
), aber das Update ist nicht.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 . Beidegrep
undPerl
(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 sogarp\{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:Dann könnten Sie es so verwenden:
Sie können dieses Skript auch an einer Stelle ablegen, an der Sie darauf zugreifen können:
Und nennen Sie es von Emacs so (nehmen Sie an, Sie haben dieses Skript in gespeichert
~/bin
):quelle