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

Gur*_*sad 17 string split elisp

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

Gur*_*sad 25

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

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


Mir*_*lov 8

如果你调用describe-functionsplit-string,通常可以通过按F1fsplit-stringEnter,您可以在文档中看到,第二个参数是不只是一个角色,而是一个正则表达式:

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

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

(s-split "\\." "1.2.3") ; ("1" "2" "3")
Run Code Online (Sandbox Code Playgroud)

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

(s-reverse (s-join "." (s-split "-" (s-trim z))))
Run Code Online (Sandbox Code Playgroud)