明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: yxp

[源码] Split 函数用 lisp 实现的方法与效率[2020-7-1更新]

  [复制链接]
发表于 2020-6-28 15:12:41 | 显示全部楼层
很久之前就看到了这个帖子,觉得正则用来字符串分割很厉害,
由于不懂正则,还是自己用lisp写了一个,
今天学了一下正则,发现楼主的这个正则split根本不能用,
比如 (split "aaaaaaabccccccc" "abc")
本应该分割成 ( "aaaaaa"  "cccccc")
但是正则的返回错误,因为它把所有的a、b、c都干掉了,不管你abc的长短跟顺序
 楼主| 发表于 2020-7-1 05:18:14 | 显示全部楼层
菜卷鱼 发表于 2020-6-28 15:12
很久之前就看到了这个帖子,觉得正则用来字符串分割很厉害,
由于不懂正则,还是自己用lisp写了一个,
今 ...

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

点评

顶,加括号变列表这一招妙极了,这绝对是最高效率的了,没有一个重复往返的动作!  发表于 2020-7-1 08:48
发表于 2020-9-30 10:45:43 | 显示全部楼层
好东西,不用正则也可以。
发表于 2025-1-2 09:54:46 | 显示全部楼层

(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")
回复 支持 反对

使用道具 举报

发表于 2025-1-2 14:40:12 | 显示全部楼层
fangmin723 发表于 2025-1-2 09:54
(p-string-tokenize-m "grdstjxftkgymdmttfixftdmsdusxftn4aysjrtixfttoot.or" "xft")
("grds" "j" "" " ...

那个版本只支持一个字符做分割符。要支持多个字符,得另外写,也就不能用vl-string->list转表处理了。
  1. (defun tt (txt sep / POS)
  2.   (if (= sep "")
  3.     (list txt)
  4.     (if        (setq POS (vl-string-search SEP txt))
  5.       (cons (substr txt 1 POS)
  6.             (tt
  7.               (substr txt (+ (strlen SEP) POS 1))
  8.               SEP
  9.             )
  10.       )
  11.       (list txt)
  12.     )
  13.   )
  14. )
回复 支持 反对

使用道具 举报

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

谢谢大佬解惑
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-1-14 23:16 , Processed in 0.166671 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表