Comment puis-je déterminer si le caractère actuel est une lettre (un caractère alphabétique) (c'est-à-dire appartient à la classe de syntaxe [:alpha:]
dans les notions d'expression régulière). Je voudrais écrire une fonction simple comme ci-dessous:
(defun test-letter () (interactive)
(if char-after-is-a-letter
(message "This is a letter")
(message "This is not a letter")
)
)
Mise à jour
Malheureusement, mon hypothèse sur l'équivalence de la classe des lettres et de la classe de syntaxe [:alpha:]
semble fausse.
la source
۱۲۳۴۵۶۷۸۹۰
mais il y a quelques vrais négatifs, par exemple l'arabe ou l'hébreu Alef:א
,ا
.五
est considéré comme le nombre5
en japonais. Votre code considère cela comme une lettre. C'est peut-être une lettre (comme en chiffre romainv
). Peut-être que quelqu'un qui connaît le japonais peut le vérifier.五
est comme le mot anglaisfive
, donc c'est une lettre. Lors de l'écriture du chiffre 5 au lieu du mot cinq, ils utilisent5
exactement comme l'anglais.EDIT: Cette réponse devrait être parfaitement valide en 25.5 (où le bug avait été corrigé). Pour les versions plus anciennes, utilisez l' autre option .
Cela devrait vous dire si le caractère actuel est une lettre et devrait fonctionner dans n'importe quelle langue.
la source
looking-at-p
utilisé dans votre solution etlooking-at
dans l'autre réponse.looking-at-p
cela ne définit pas les données de correspondance.match-string
(et ses nombreux frères et sœurs) renverra le résultat de la recherche. Pendant ce temps, avec la version non prédicat, match-string retournera le résultat de la correspondance en cours.Je pense que vous pouvez vous en sortir:
Mise à jour
C'est moins efficace, mais plus proche de ce que vous voulez:
la source
۹
(c'est-à-dire le chiffre indien 9) ou٪
comme une lettre.ζ
ouα
), mais la mise à jour ne l'est pas.Au cas où vous seriez très préoccupé par les caractères nationaux et le traitement précis des classes de caractères Unicode, alors la seule solution que j'ai pu trouver jusqu'à présent est la
regex
bibliothèque Python . Les deuxgrep
etPerl
(à ma grande surprise!) N'ont pas fait le travail correctement.Ainsi, l'expression régulière que vous êtes est après celui - ci:
\p{L}
. Ceci est connu comme la version abrégée de la propriété Unicode, la version complète est\p{Letter}
ou mêmep\{General_Category=Letter}
.Letter
est en soi une classe composite, mais je n'entrerai pas dans les détails, la meilleure référence que j'ai pu trouver sur le sujet est ici .La bibliothèque Python n'est pas intégrée au langage (c'est une alternative à la
re
bibliothèque intégrée). Vous devez donc l'installer, par exemple:Ensuite, vous pouvez l'utiliser comme ceci:
Vous pouvez également placer ce script quelque part où vous pouvez y accéder:
Et appelez-le depuis Emacs comme ceci (supposons que vous ayez enregistré ce script
~/bin
):la source