Elisp分割字符串函数,通过“.”字符分割字符串

22

我想使用“split-string”函数根据.字符来拆分一个字符串。但是(split-string "1.2.3" ".")完全不起作用。它只返回一个变量数量的空字符串列表。是否需要转义或以某种不同的方式指定.这个特殊字符?

我尝试使用“split-string”函数以“.”为分隔符来拆分一个字符串,但是(split-string "1.2.3" ".")没有任何效果,它只会返回一个由多个空字符串组成的列表。这是因为`.`是一个特殊字符,需要进行转义或以其他方式进行指定。
2个回答

33

这是split-string函数的官方文档 - https://www.gnu.org/software/emacs/manual/html_node/elisp/Creating-Strings.html

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


12
如果您调用split-string函数并使用F1fsplit-stringEnter,通常可以查看文档,其中第二个参数不仅是一个字符,还是一个正则表达式:

如果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))))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接