- 积分
- 63995
- 明经币
- 个
- 注册时间
- 2010-5-9
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 自贡黄明儒 于 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
评分
-
查看全部评分
|