明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 64673|回复: 331

[函数] ;;常用字符串的处理--向无痕学习致敬!!

    [复制链接]
发表于 2013-10-19 16:21 | 显示全部楼层 |阅读模式
本帖最后由 自贡黄明儒 于 2022-5-16 18:09 编辑

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=61917 梁雄啸
自从无痕发表《一刀屠文》以来,由于他举的例子不生动,很难认识到本文的价值。
就X版和几位网友之意见,将我发的字符串处理集中一下
;;[功能] 字符串分割
;;[功能] 从后面取 指定字符后的字符
;;[功能] 从前面取 指定字符前的字符
;;[功能] 取文字末尾的数字和小数点
;;[功能] 取文字末尾的数字
;;[功能] 取文字前的数字和小数点
;;[功能] 取文字前的数字
;;[功能] 取文字中的数字
;;[功能] 字符串内容是否是数字
;;[功能] 字符串末尾数字+1
;;[功能] 特殊字符处理
;;[功能] 字符查找替换
;;[功能] 字符分割
;;[功能] 字符串内是否包含指定的字符
;;[功能] 倒置字符串
;;[功能] 中英文分割
;;[功能] 提取中文
;;[功能] 提取英文
;;[功能] 输入对话框

;;[功能] 字符串分割 By st788796
;;这是一个很万能的分割法,只不过delim写法复杂
;;示例:,分割(parse3 "A 3.2测,试5.66D" "[^,]+");;("A 3.2测" "试5.66D")
;;空格分割(parse3 "A 3.2测,试5.66D" "[^\\s]+");;("A" "3.2测,试5.66D")
;;中英文空格(parse3 "A 3.2测,试5.66D" "[\\u4E00-\\u9FA5]+|[^\\u4E00-\\u9FA5/ ]+|[\\s]+");;("A" " " "3.2" "测" "," "试" "5.66D")
;;中文(parse3 "A 3.2测,试5.66D" "[\\u4E00-\\u9FA5]+");;("测" "试")
;;英文(parse3 "A 3.2测,试5.66D" "[^\\u4E00-\\u9FA5]+");;("A 3.2" "," "5.66D")
(defun parse3 (str delim)
  (xd::string:regexps delim str "")
)

;;[功能] 从后面取 指定字符后的字符
;;示例(HH:GetBehindStr1 "5.4a2.3aA4.3" "a");返回"A4.3"
(defun HH:GetBehindstr1 (str st);区分大小写
  (car (xd::string:regexps (strcat "[^" st "]+$") str "I"))
)
;;(HH:GetBehindStr2 "5.4a2.3aA4.3" "a");返回"4.3"
(defun HH:GetBehindstr2 (str st)
  (car (parse3 str (strcat "[^" st "]+$")))
)

;;[功能] 从前面取 指定字符前的字符
;;示例(HH:GetBeforeStr1 "5.4a2.3aA4.3" "A");返回"5.4a2.3a"
(defun HH:GetBeforeStr1 (str st);区分大小写
  (car (xd::string:regexps (strcat "[^" st "]+") str "I"))
)
;;示例(HH:GetBeforeStr2 "5.4a2.3aA4.3" "A");返回"5.4"
(defun HH:GetBeforeStr2 (str st)
  (car (parse3 str (strcat "[^" st "]+")))
)

;;[功能] 取文字末尾的数字和小数点 By 自贡黄明儒
;;http://bbs.mjtd.com/thread-107150-1-1.html中定义xd::string:regexps
;;示例(HH:EndNumber1+ "5.4aAa2.3"),返回"2.3"
(defun HH:EndNumber1+ (str)
  (car (xd::string:regexps "(\\d+)?[.]?(\\d+)+$" str ""))
)
;;示例(HH:EndNumber2+ "5.4aAa2.3"),返回"2.3"
(defun HH:EndNumber2+ (str)  
  (car (parse3 str "(\\d+)?[.]?(\\d+)+$"))
)

;;[功能] 取文字末尾的数字 By 自贡黄明儒
;;http://bbs.mjtd.com/thread-107150-1-1.html中定义xd::string:regexps
;;示例(HH:EndNumber1 "5.4a2.32"),返回"32"
(defun HH:EndNumber1 (str)
  (car (xd::string:regexps "\\d+$" str ""))
)
;;示例(HH:EndNumber2 "5.4a2.32"),返回"32"
(defun HH:EndNumber2 (str)
  (car (parse3 str "\\d+$"))  
)

;;[功能] 取文字前的数字和小数点 By 自贡黄明儒
;;http://bbs.mjtd.com/thread-107150-1-1.html中定义xd::string:regexps
;;示例(HH:StartNumber+ "5.42a2.3"),返回"5.42"
(defun HH:StartNumber+ (str)
  (car (xd::string:regexps "^(\\d+)?[.]?(\\d+)+" str ""))
)

;;[功能] 取文字前的数字 By 自贡黄明儒
;;http://bbs.mjtd.com/thread-107150-1-1.html中定义xd::string:regexps
;;示例(HH:StartNumber1 "5.4a2.32"),返回"5"
(defun HH:StartNumber1 (str)
  (car (xd::string:regexps "^\\d+" str ""))
)
;;示例(HH:StartNumber2 "5.4a2.32"),返回"5"
(defun HH:StartNumber2 (str)
  (car (parse3 str "^\\d+"))  
)

;;[功能] 取文字中的数字 By 自贡黄明儒
;;http://bbs.mjtd.com/thread-107150-1-1.html中定义xd::string:regexps
;;示例(HH:GetStrNumber1 "5.4a2.32c"),返回("5.4" "2.32")
(defun HH:GetStrNumber1 (str)
  (xd::string:regexps "(\\d+)?[.]?(\\d+)+" str "")
)
;;示例(HH:GetStrNumber2 "5.4a2.32c"),返回("5.4" "2.32")
(defun HH:GetStrNumber2 (str)
  (parse3 str "(\\d+)?[.]?(\\d+)+")  
)

;;[功能] 字符串内容是否是数字 By 自贡黄明儒
;;示例(HH:StrIsNumber "5.4"),返回5.4
;;(HH:StrIsNumber (HH:EndNumber+ "5.4a2.3")),返回2.3
(defun HH:StrIsNumber (str)
  (distof str)
)

;;[功能] 字符串末尾数字+1
;;http://bbs.mjtd.com/thread-107150-1-1.html中定义xd::string:regexps
;;http://bbs.mjtd.com/forum.php?mo ... 0&pid=608841&page=2中定义XD::String:Replace
;;示例(HH:EndNumberAdd "a3.02");返回"a3.03"
(defun HH:EndNumberAdd (str / I STR1 STR2)
  (if (setq str1 (car (xd::string:regexps "\\d+$" str "")))
    (progn (setq str2 (itoa (1+ (atoi str1))))          ;提取的尾数+1
           (setq i (- (strlen str1) (strlen str2)))
           (if (> i 0)
             (repeat i (setq str2 (strcat "0" str2)))
           )
           (XD::String:Replace "\\d+$" str str2 "")
    )
    (strcat str "1")
  )
)

;;[功能] 特殊字符处理
;;示例(ACET-STR-ESC-WILDCARDS1 "#a@b");"`#a`@b"
;;http://bbs.mjtd.com/forum.php?mo ... 0&pid=608841&page=2中定义XD::String:Replace
(defun ACET-STR-ESC-WILDCARDS1 (A / X LST)
  ;;(ACET-STR-REPLACE "B" "2" "ssABCsBs");"ssA2Cs2s"
  (defun ACET-STR-REPLACE1 (o n s)
    (XD::String:Replace (strcat "[" o "]") s n "I")
  )
  (SETQ LST '("#" "@" "." "*" "?" "~" "[" "]" ","))
  (foreach X LST
    (SETQ A (ACET-STR-REPLACE1 X (STRCAT "`" X) A))
  )
  A
)

;;[功能] 字符查找替换
;;示例(ACET-STR-REPLACE1 "B" "2" "ssABCsBs");"ssA2Cs2s"
;;ET安装后函数是(ACET-STR-REPLACE "B" "2" "ssABCsBs")
(defun ACET-STR-REPLACE1 (o n s)
  (XD::String:Replace (strcat "[" o "]") s n "I")
)

;;[功能] 字符分割
;;示例(ACET-STR-TO-LIST1 "B" "ssABCsBs");("ssA" "Cs" "s")
;;ET安装后函数是(ACET-STR-TO-LIST "B" "ssABCsBs")
(defun ACET-STR-TO-LIST1 (d str)
  (XD::String:RegExpS (strcat "[^" d "]+") str "I")
)

;;[功能] 字符串内是否包含指定的字符
;;示例(ACET-STR-WCMATCH "ssABCsBs" "*c*");T
(defun ACET-STR-WCMATCH1 (str f)
  (if (XD::String:RegExpS (strcat "[" f "]+") str "")
    T
  )
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 5明经币 +4 金钱 +5 收起 理由
yoyoho + 1 很给力!
tryhi + 1
LPACMQ + 5 很给力! 整理得较全面,实用强,希望再接再.
lostbalance + 1 从后面取 指定字符后的字符,这个函数不支持.
linshiyin2 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2022-5-19 08:50 | 显示全部楼层
好东西,收藏了,函数库又又增加了
发表于 2023-10-22 19:42 | 显示全部楼层
好东西,收藏下来,好好学习一下。
发表于 2018-8-18 17:49 | 显示全部楼层

谢谢楼主的分享!很有用啊!
发表于 2013-10-19 20:03 | 显示全部楼层
大儒,你的    常用函数.lsp ,啥时候,再重新上传一次啊?!
发表于 2013-10-19 21:00 | 显示全部楼层
hrsxyhxdrhujdtyjdthesxyh

点评

emk
发帖要尊重楼主,不要这样哈,兄弟  发表于 2013-10-20 15:11
发表于 2013-10-19 21:14 | 显示全部楼层
看看先,非常好
发表于 2013-10-19 22:29 来自手机 | 显示全部楼层
回复感谢,黄老师就是贴心。。。
发表于 2013-10-19 23:28 | 显示全部楼层
哎呦,看一个个哦!
发表于 2013-10-20 08:54 | 显示全部楼层
为何下载不了,显示“下载失败,磁盘空间不足”
发表于 2013-10-20 10:07 | 显示全部楼层
楼上的,你的硬盘没空间里呗!
发表于 2013-10-20 10:24 | 显示全部楼层
学习!!!!!!!!!!!
发表于 2013-10-20 10:30 | 显示全部楼层
谢谢楼主的分享!很有用啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 05:08 , Processed in 0.403827 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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