Elisp 分割字符串函数,用于按 分割字符串。性格

问题描述 投票:0回答:2

我正在尝试使用基于 .split-string 的“split-string”函数来拆分字符串。特点。但

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

string elisp split
2个回答
33
投票

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

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


12
投票

如果你在

describe-function
上调用
split-string
,通常是按F1f
split-string
Enter,你可以在文档中看到,第二个参数不仅仅是一个字符,而是一个正则表达式:

如果 SEPARATORS 非零,它应该是一个正则表达式匹配文本,用于分隔子字符串,但不是子字符串的一部分。 如果为零,则默认为“split-string-default-separators”,通常为“[ u000b]+”,并且 OMIT-NULLS 被迫 t。

虽然对于大多数简单的字符串操作,Emacs 内置函数就足够了,但当您在 Elisp 代码中大量使用字符串操作时,

s.el
第三方库是必不可少的。您可以通过 Emacs 包管理器安装它,方法是运行命令
package-install
,并将
s
作为包名称。假设您在多个模块中拥有多个函数,所有函数都对字符串进行操作、连接、拆分、大写、比较、修剪空格等。将所有与字符串相关的函数放在一个公共命名空间下是有意义的,因此
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))))
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.