Elisp split-string函数用于拆分字符串。字符

时间:2011-06-04 10:31:47

标签: string elisp split

我正在尝试使用基于的'split-string'函数拆分字符串。字符。但 (split-string "1.2.3" ".")根本不起作用。它只返回一个可变数量的空字符串列表。是。需要以某种不同方式转义或指定的特殊字符?

2 个答案:

答案 0 :(得分:25)

以下是split-string函数的官方文档 - http://www.gnu.org/software/emacs/manual/html_mono/elisp.html#Creating-Strings

(split-string "1.2.3" "\.")中分裂字符串函数的第二个参数是一个正则表达式,因此都是'。'字符和'\'字符具有特殊含义。所以 '。'角色需要被转义,甚至'\'字符也需要用另一个'\'来转义。 (split-string "1.2.3" "\\.")可以正常工作。

答案 1 :(得分:8)

如果您在describe-function上致电split-string,通常按 F1 f split-string 输入 ,您可以在文档中看到,第二个参数不仅仅是一个字符,而是一个正则表达式:

  

如果SEPARATORS非零,则它应该是匹配文本的正则表达式,该文本分隔但不是子字符串的一部分。如果为nil,则默认为“split-string-default-separators”,通常为“[\ f \ t \ n \ r \ _V] +”,OMIT-NULLS强制为t。

虽然对于大多数简单的字符串操作,Emacs内置函数就足够了,当你在Elisp代码中大量使用字符串操作时,s.el第三方库是必不可少的。您可以通过运行带有package-install的命令s作为包名称,通过Emacs包管理器安装它。假设您在多个模块中有多个函数,它们都使用字符串,连接,拆分,大写,比较,修剪空格等等。将所有与字符串相关的函数放在一个公共命名空间下是有意义的,因此s.el替代内置split-string将是s-split

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

例如,如果您需要将字符串" 1-2-3 "转换为"3.2.1",则可以写:

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