我想使用“split-string”函数根据.字符来拆分一个字符串。但是(split-string "1.2.3" ".")
完全不起作用。它只返回一个变量数量的空字符串列表。是否需要转义或以某种不同的方式指定.这个特殊字符?
(split-string "1.2.3" ".")
没有任何效果,它只会返回一个由多个空字符串组成的列表。这是因为`.`是一个特殊字符,需要进行转义或以其他方式进行指定。这是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" "\\.")
将按预期正常工作。
split-string
函数并使用F1fsplit-string
Enter,通常可以查看文档,其中第二个参数不仅是一个字符,还是一个正则表达式:
对于大多数简单的字符串操作,Emacs内置函数足够使用。当在Elisp代码中频繁使用字符串操作时,无法缺少第三方库如果SEPARATORS非空,则应为匹配分隔文本的正则表达式,但不是子字符串的一部分。 如果为nil,则默认为 `split-string-default-separators',通常为 "[\f\t\n\r\v]+",并强制OMIT-NULLS为t。
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))))