Quando ho una stringa come "Test.m", come posso ottenere la sottostringa "Test" da quella via elisp? Sto cercando di usarlo nel mio file .emacs
.Come posso ottenere una sottostringa di una stringa in Emacs Lisp?
risposta
Un modo è quello di utilizzare substring
(o substring-no-properties
):
(substring "Test.m" 0 -2) => "Test"
(
substring
STRINGDA&optional
TO)ritorno una nuova stringa i cui contenuti sono una stringa di STRING. Il stringa restituita è costituito dai caratteri tra indice DA (compreso) e indice PER (esclusiva) di STRING. DA e TO sono con zero indicizzazione: 0 indica il primo carattere di STRING. I valori negativi vengono contati dalla fine di STRING. Se TO è
nil
, la sottostringa viene eseguita fino alla fine di STRING.
Probabilmente l'opzione più flessibile (anche se non è chiaro se avete bisogno di flessibilità) sarebbe quella di utilizzare replace-regexp-in-string
:
Vedi Chfreplace-regexp-in-string
RET
esempio:
(replace-regexp-in-string "\\..*" "" "Test.m")
Nel tuo caso particolare, ti potrebbe piacere usare file-name-sans-extension
.
Stefan's answer è idiomatico, quando hai solo bisogno di un nome di file senza estensione. Tuttavia, se si manipolano pesantemente file e filepath nel codice, si consiglia di installare l'API di file e directory f.el
di Johan Andersson, poiché fornisce molte funzioni assenti in Emacs con un'API coerente. Scopri le funzioni f-base
e f-no-ext
:
(f-base "~/doc/index.org") ; => "index"
(f-no-ext "~/doc/index.org") ; => "~/doc/index"
Se, invece, si lavora con corde spesso, installare Magnar Sveen del s.el
per le stesse ragioni. Potreste essere interessati a s-chop-suffix
:
(s-chop-suffix ".org" "~/doc/index.org") ; => "~/doc/index"
Per sottostringa generico utilizzo recupero dkim's answer.
Questa è una bella soluzione di alto livello. Grazie. – Jabba
Grazie mille. – Peter