在Racket中分割字符串

6
我想在Racket中将一个字符串转换为只包含一个字符串的列表:
(string-split-wishful "abcd" "") => (list "a" "b" "c" "d")

我需要的功能是这样的。最接近的东西是string-split,但它并不能做到我想要的:

(string-split "abcd" "") => (list "" "a" "b" "c" "d" "")

我该如何去除开头和结尾多余的空字符串?我知道可以使用类似于 (reverse (cdr (reverse (cdr (string-split "abcd" "")))) 的方法,但我想知道是否有更符合习惯的做法。


7
你可以使用(map string (string->list str))。意思是将字符串转换成字符列表后,再使用map函数将每个字符转换成一个只包含该字符的字符串,最终得到一个字符串列表。 - Alexis King
1个回答

8

试试这个:

(string-split "abcd" #rx"(?<=.)(?=.)")
; ==> ("a" "b" "c" "d")

它使用正则表达式而不是字符串,其中正则表达式包括一个零宽度正向后查找断言,只有在一个字符之后才能匹配,并且一个零宽度正向前查找断言,使得匹配需要在其右侧具有一个字符。
Alexis的建议也很好,甚至可能表现更好:
(map string (string->list "abcd"))

如何将表达式拆分为子表达式? - X10D
为什么使用空字符串分隔符的默认行为会在输出中产生空字符串? - alxndr

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