找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3088|回复: 26

[字符串] (XD::String:IsNumEnd)判断字符串是否数字结尾

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-8-2 21:40:42 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::String:IsNumEnd
调用格式: (XD::String:IsNumEnd str)
参数说明: str --- 字符串
返回值: 是 表 (数值 匹配串)
否 NIL
函数简介: 判断字符串是否数字结尾
函数来源: 原创
函数作者: Lispboy
适用版本: XDRX API 
最后更新时间: 2013-08-02
备注: 命令: (XD::String:IsNumEnd "A-100.0")
("100.0" "[0-9.]+$")

命令: (XD::String:IsNumEnd "A-100.0A")
nil

命令: (XD::String:IsNumEnd "A-1")
("1" "[0-9.]+$")
演示图片: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 Lispboy 于 2013-8-2 22:03 编辑

  1. ;|
  2. 判断字符串是否数字结尾
  3. 参数:
  4.    str --- 字符串
  5. 返回值:
  6.    是 表 (数值 匹配串)
  7.    否 NIL
  8. |;
  9. (defun XD::String:IsNumEnd (str / ret)
  10.   (setq ret (XD::String:RegExpS "[0-9.]+$" str ""))
  11.   (if ret
  12.     (list (car ret) "[0-9.]+$")
  13.   )
  14. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-8-2 21:50:26 | 显示全部楼层
一个应用,把数字结尾的字符串,末尾数字+1

  1. 命令: (setq str "A-1")
  2. "A-1"

  3. 命令: (setq str1 (XD::String:IsNumEnd str))
  4. ("1" "[0-9.]+$")

  5. 命令: (setq match (cadr str1))
  6. "[0-9.]+$"

  7. 命令: (setq str1 (car str1))
  8. "1"

  9. 命令: (XD::String:RegexpR match str (itoa (+ 1 (atoi str1))) "")
  10. "A-2"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-3 07:25:38 来自手机 | 显示全部楼层
不用正则的话,vl-string->list后reverse,用ascii判断也可,转回去wcmatch亦可,进一步可以用list循环取出最后的数字来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-3 15:42:06 | 显示全部楼层
还可以这样
  1. (defun !lastnum (str / nl l num)
  2.   (if (distof str)
  3.     str
  4.     (progn
  5.       (setq nl '(48 49 50 51 52 53 54 55 56 57)
  6.      l  (reverse (vl-string->list str))
  7.       )
  8.       (while (vl-position (car l) nl)
  9. (setq num (cons (car l) num)
  10.        l   (cdr l)
  11. )
  12.       )
  13.       (cond
  14. ((and num l)
  15.   (list (vl-list->string (reverse l)) (vl-list->string num))
  16. )
  17. (num
  18.   (list (vl-list->string num))
  19. )
  20. (t str)
  21.       )
  22.     )
  23.   )
  24. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-3 15:54:19 | 显示全部楼层
本帖最后由 wowan1314 于 2013-8-3 15:56 编辑

命令: (XD::String:IsNumEnd "AA.")
("." "[0-9.]+$")

我原来写的也不能完全处理。有些 比如 “A--”也被认为是数字。
  1. ; 得到带数字后缀的字符串的 (文字前缀、数字后缀、小数点位数)
  2. (defun t11 (txt1 / nums lop a1 txt len a2)
  3.     (setq nums '(49 50 51 52 53 54 55 56 57 48 43 45 46)
  4.         lop t
  5.         a1 0
  6.         txt (reverse(vl-string->list txt1))
  7.     )
  8.     (while lop
  9.         (if (member (car txt) nums)
  10.             (progn
  11.                 (if (= (car txt) 46) (setq a2 a1))
  12.                 (setq a1 (1+ a1) txt (cdr txt))
  13.             )
  14.             (setq lop nil)
  15.         )
  16.     )
  17.     (if (/= a1 0)
  18.         (progn
  19.             (setq len (- (strlen txt1) a1))
  20.             (list (substr txt1 1 len) (substr txt1 (1+ len)) a2)
  21.         )
  22.     )
  23. )

点评

正则肯定能解决,-号后必须跟数字的匹配。.后必须跟数字的匹配。  详情 回复 发表于 2013-8-3 16:00
实际上这个函数只判断是否是正整数结尾就够了,CAD里面很少有 AA-2.0这样的存在。 这样 匹配串这样写就行了 "[0-9]+$"  详情 回复 发表于 2013-8-3 15:59
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-3 15:56:04 | 显示全部楼层
使用正则,很多字符串的操作都简化了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-3 15:59:01 | 显示全部楼层
wowan1314 发表于 2013-8-3 15:54
命令: (XD::String:IsNumEnd "AA.")
("." "[0-9.]+$")

实际上这个函数只判断是否是正整数结尾就够了,CAD里面很少有 AA-2.0这样的存在。
这样 匹配串这样写就行了  "[0-9]+$"

点评

你这样写怎么能匹配实数? 楼主是要写个可以处理 带数字后缀和纯数字字符串的程序的。  发表于 2013-8-3 16:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-3 16:00:34 | 显示全部楼层
再贴个  狂刀的吧。 还是用distof处理好些。
  1. (defun strbrk (str / i st1 n)
  2.     (setq i 0)
  3.     (while (not(or(= "" (setq st1(substr str(setq i(1+ i)))))(setq n(distof st1)))))
  4.     (list (substr str 1 (1- i)) (if n n 0) str)
  5.   )

点评

我说的 "[0-9]+$" 是说对字符串结尾是整数的A-1,A-22这样的啊,不是说的纯数字的那个,那个要另外的模式串。  详情 回复 发表于 2013-8-3 17:13
你总点评,我没法回复你。 我不是说了吗, A-2.0这样的不用匹配,只找 A-2这样的。  详情 回复 发表于 2013-8-3 17:01
正则表达式的优点不在于查找,而是在于替换。所以深入研究是值得的。匹配串找到,修改字符串非常容易,代码也很短。  详情 回复 发表于 2013-8-3 16:13
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-3 16:00:35 | 显示全部楼层
wowan1314 发表于 2013-8-3 15:54
命令: (XD::String:IsNumEnd "AA.")
("." "[0-9.]+$")

正则肯定能解决,-号后必须跟数字的匹配。.后必须跟数字的匹配。

点评

如此强大的正则肯定是能写出来的。。 只是提醒下楼主的写法有遗漏。  发表于 2013-8-3 16:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-3 16:05:09 | 显示全部楼层
给LISPBOY找些匹配串,根据需要修改下函数即可

"^\d+$ "  //非负整数(正整数   +   0)

"^[0-9]*[1-9][0-9]*$ "  //正整数

"^((-\d+)|(0+))$ "  //非正整数(负整数   +   0)

"^-[0-9]*[1-9][0-9]*$ "  //负整数

"^-?\d+$ "    //整数

"^\d+(\.\d+)?$ "  //非负浮点数(正浮点数   +   0)  ^([1-9]\d*|\d+\.\d+)$



^(([1-9]+)|([0-9]+/.[0-9]{1,2}))$      //非负数 小数点后保留两位



"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ "  //正浮点数

"^((-\d+(\.\d+)?)|(0+(\.0+)?))$ "  //非正浮点数(负浮点数   +   0)

"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ "  //负浮点数

"^(-?\d+)(\.\d+)?$ "  //浮点数

"^[A-Za-z]+$ "  //由26个英文字母组成的字符串

"^[A-Z]+$ "  //由26个英文字母的大写组成的字符串

"^[a-z]+$ "  //由26个英文字母的小写组成的字符串

"^[A-Za-z0-9]+$ "  //由数字和26个英文字母组成的字符串

"^\w+$ "  //由数字、26个英文字母或者下划线组成的字符串
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-3 16:13:11 | 显示全部楼层
wowan1314 发表于 2013-8-3 16:00
再贴个  狂刀的吧。 还是用distof处理好些。

正则表达式的优点不在于查找,而是在于替换。所以深入研究是值得的。匹配串找到,修改字符串非常容易,代码也很短。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-8-3 17:01:56 | 显示全部楼层
本帖最后由 Lispboy 于 2013-8-3 17:03 编辑
wowan1314 发表于 2013-8-3 16:00
再贴个  狂刀的吧。 还是用distof处理好些。

你总点评,这样别人没法回复你。

newer说的, A-2.0这样的不用匹配,只找 A-2这样的。 你认为这样做好吗?

点评

想到个情况 可能带数字的后缀不是用来编号的,那么就需要实数做后缀了。 比如标记面积: 1号=125.9 2号=140.6 这样的。 实际工作,因专业不同 而 需求不同。 尽可能的多包涵些。  详情 回复 发表于 2013-8-3 18:46
我这里倒是没问题。我工作中不会出现A-2.0的情况。 但是多考虑点总是好的。  详情 回复 发表于 2013-8-3 18:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-8-3 17:04:25 | 显示全部楼层
我会根据大家的意见完善函数的,希望大家多提意见。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-3 17:13:19 | 显示全部楼层
wowan1314 发表于 2013-8-3 16:00
再贴个  狂刀的吧。 还是用distof处理好些。

我说的 "[0-9]+$" 是说对字符串结尾是整数的A-1,A-22这样的啊,不是说的纯数字的那个,那个要另外的模式串。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-3 18:05:43 来自手机 | 显示全部楼层
以前有个中西拆分函数,再找找来自: Android客户端

点评

http://www.xdcad.net/forum/forum.php?mod=viewthread&tid=58403 纪念下,应该可以改进  详情 回复 发表于 2013-8-3 18:14
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-23 00:45 , Processed in 0.437672 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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