菜卷鱼 发表于 2020-6-28 15:12:41

很久之前就看到了这个帖子,觉得正则用来字符串分割很厉害,
由于不懂正则,还是自己用lisp写了一个,
今天学了一下正则,发现楼主的这个正则split根本不能用,
比如 (split "aaaaaaabccccccc" "abc")
本应该分割成 ( "aaaaaa""cccccc")
但是正则的返回错误,因为它把所有的a、b、c都干掉了,不管你abc的长短跟顺序

yxp 发表于 2020-7-1 05:18:14

菜卷鱼 发表于 2020-6-28 15:12
很久之前就看到了这个帖子,觉得正则用来字符串分割很厉害,
由于不懂正则,还是自己用lisp写了一个,
今 ...

已修正。效率也提高不少。

烟盒迷唇 发表于 2020-9-30 10:45:43

好东西,不用正则也可以。

fangmin723 发表于 2025-1-2 09:54:46

vectra 发表于 2018-4-13 21:51
EASY!




(p-string-tokenize-m "grdstjxftkgymdmttfixftdmsdusxftn4aysjrtixfttoot.or" "xft")
("grds" "j" "" "" "kgymdm" "" "" "i" "" "" "dmsdus" "" "" "n4aysjr" "i" "" "" "" "oo" ".or")

(p-string-tokenize "grdstjxftkgymdmttfixftdmsdusxftn4aysjrtixfttoot.or" "xft")
("grdstj" "ftkgymdmttfi" "ftdmsdus" "ftn4aysjrti" "fttoot.or")

kozmosovia 发表于 2025-1-2 14:40:12

fangmin723 发表于 2025-1-2 09:54
(p-string-tokenize-m "grdstjxftkgymdmttfixftdmsdusxftn4aysjrtixfttoot.or" "xft")
("grds" "j" "" " ...

那个版本只支持一个字符做分割符。要支持多个字符,得另外写,也就不能用vl-string->list转表处理了。(defun tt (txt sep / POS)
(if (= sep "")
    (list txt)
    (if        (setq POS (vl-string-search SEP txt))
      (cons (substr txt 1 POS)
          (tt
              (substr txt (+ (strlen SEP) POS 1))
              SEP
          )
      )
      (list txt)
    )
)
)

fangmin723 发表于 2025-1-3 07:59:45

kozmosovia 发表于 2025-1-2 14:40
那个版本只支持一个字符做分割符。要支持多个字符,得另外写,也就不能用vl-string->list转表处理了。

谢谢大佬解惑

tanxindong 发表于 2025-1-28 09:12:56

好东西,天天来论坛,天天在进步
页: 1 2 [3]
查看完整版本: Split 函数用 lisp 实现的方法与效率[2020-7-1更新]