2011-06-04 367 views
16

我想分割一個字符串使用'拆分字符串'函數的基礎上。字符。但是 (split-string "1.2.3" ".")根本不起作用。它只是返回一個可變數量的空字符串列表。是。需要以某種不同的方式逃脫或指定的特殊字符?Elisp拆分字符串函數來拆分字符串。字符

回答

7

如果你調用describe-functionsplit-string,通常按F1˚Fsplit-string輸入,您可以在文檔中看到,第二個參數是不只是一個角色,而是一個正則表達式:

如果SEPARATORS不是零,它應該是一個正則表達式匹配的文本,它可以區分但不是子串的一部分。如果nil缺省爲'split-string-default-separators',通常爲「[\ f \ t \ n \ r \ v] +」,並且OMIT-NULLS被強制爲t。

雖然對於大多數簡單的字符串操作的Emacs內置的功能足夠了,當你使用字符串操作巨資elisp的代碼,s.el第三方庫是必不可少的。您可以通過運行命令package-installs作爲軟件包名稱,通過Emacs軟件包管理器進行安裝。假設你在幾個模塊中都有多個函數,所有這些模塊都是用字符串做的,比如加入,分割,大寫,比較,修剪空白等等。這是有道理的有在一個共同的名字空間所有的字符串相關的功能,所以s.el的替代內置split-strings-split

(s-split "\\." "1.2.3") ; ("1" "2" "3") 

例如,如果您需要轉換字符串" 1-2-3 ""3.2.1",你可寫:

(s-reverse (s-join "." (s-split "-" (s-trim z))))