sunqv 发表于 2023-5-13 21:01:26

如何分别提取一个字符串中某个字符前面和后面的数字?

如何分别提取一个字符串中某个字符前面和后面的数字?

比如:我得到的字符是”200X100“   我想分别提取这个字符串中的 200 和100   求大神帮忙 ,

或者说我可以换个方法解决,我想用200X100的结果和20000比较大小。

问题是,我两个方法都不知道怎么办,只能求助了

yaojing38 发表于 2023-5-13 21:07:48

正则 [^X]即可,自己去搜索下。。。

sunqv 发表于 2023-5-13 21:13:32

老哥,既然回复了麻烦好人做到底啊    对于你们来说应该很简单的,帮帮忙了

yaojing38 发表于 2023-5-13 21:21:17

sunqv 发表于 2023-5-13 21:13
老哥,既然回复了麻烦好人做到底啊    对于你们来说应该很简单的,帮帮忙了

找个正则函数,,把按要求填参数,,,,搜个正则还要我帮你??论坛大神贡献了好多,免费的!

sunqv 发表于 2023-5-13 22:59:46

顶一下   求助大神

vitalgg 发表于 2023-5-13 23:25:32

命令: (get-numbers-side-of-x "200X300")
("200" "300")

命令: (get-numbers-side-of-x "ab200X300cd")
("200" "300")

命令:
命令: (get-numbers-side-of-x "ab200X300")
("200" "300")

命令: (get-numbers-side-of-x "ab200x300")
("200" "300")

命令: (get-numbers-side-of-x "ab200x500")
("200" "500")

命令: (get-numbers-side-of-x "ab20.0x50.0")
("20.0" "50.0")

(defun get-numbers-side-of-x (str)
(setq lst (mapcar 'strcase (string:auto-split str)))
(if
    (and
      (member "X" lst)
      (> (setq pos (vl-position "X" lst)) 0)
      (string:numberp (nth (1- pos) lst))
      (string:numberp (nth (1+ pos) lst))
    )
    (list (nth (1- pos) lst) (nth (1+ pos) lst))
)
)

kucha007 发表于 2023-5-14 02:04:45

感兴趣可以研究一下这个帖子:
http://bbs.mjtd.com/thread-187723-1-1.html

sunqv 发表于 2023-5-15 09:13:09

vitalgg 发表于 2023-5-13 23:25
命令: (get-numbers-side-of-x "200X300")
("200" "300")



谢谢大佬提供函数

xyp1964 发表于 2023-5-15 10:33:25

(defun StrSpr (str sub / lst n)
;; (StrSpr "200X100" "X") → ("200" "100")
(while (setq n (vl-string-search sub str))
    (setq lst (cons (substr str 1 n) lst)
          str (substr str (+ n (strlen sub) 1))
    )
)
(vl-remove "" (reverse (cons str lst)))
)

mokson 发表于 2023-5-15 11:40:30

用取得X号在字符串中的位置,就可以用修剪的方法了。
页: [1] 2
查看完整版本: 如何分别提取一个字符串中某个字符前面和后面的数字?