ksperopoulos 发表于 2022-7-5 23:57:34

仅删除字母字符

有没有简单的方法?我试图使用vl string left trim删除所有字母或符号字符。只要我知道这个字符串中的所有内容,我就可以删除它们,但我不知道我是否总是这样。我宁愿有一个安全网,可以捕捉任何东西,以防它发生变化。

Lee Mac 发表于 2022-7-6 00:00:59

使用vl string->list将字符串转换为ASCII字符代码列表,然后使用vl remove if和适当的谓词函数处理此列表,删除不符合条件的代码,然后使用vl list->string将生成的ASCII代码列表转换回字符串。
 
这是一个ASCII字符代码参考。

BIGAL 发表于 2022-7-6 00:06:56

李,你的解析数呢。lsp,但ascii值设置为非数字作为方法示例。

ksperopoulos 发表于 2022-7-6 00:10:04

李-谢谢你的回复。我尝试了一种类似于你今天早些时候建议的方法,但没有成功。我在运行vl string->list后得到了返回的ascii码,但当我尝试使用vl remove if时,我得到了一个错误,指出“比较的参数类型错误”。我知道这可能与我试图获取返回“T”的值时犯的错误有关,但我的大脑已经崩溃了。我认为我的搜索正在引导我走上正确的道路,但我的经验不足使我无法很快地朝着这个方向前进。我明天再拿回来。

Tharwat 发表于 2022-7-6 00:12:18

示例。。。
 

(vl-list->string (vl-remove-if (function (lambda (u) (or (< 64 u 91) (< 96 u 123)))) (vl-string->list "Abcd12345XwZ")))

marko_ribar 发表于 2022-7-6 00:14:22

看看突出显示的数字,塔尔瓦特。。。
 
(vl-list->string (vl-remove-if (function (lambda (u) (or (< 64 u 91) (< 96 u 123)))) (vl-string->list "Abcd12345XwZ")))

Tharwat 发表于 2022-7-6 00:19:25

 
感谢Marko的更正,非常感谢。

pBe 发表于 2022-7-6 00:21:33

为什么不呢?
 
(vl-list->string
   (vl-remove-if-not
(function (lambda (u) (< 47 u 58)))
(vl-string->list str)
   )
   )

pBe 发表于 2022-7-6 00:23:26

香草
 
(defun numbers1 (str / a b)
(setq a "")
(repeat (strlen str)
   (if        (< 47 (ascii (setq b (substr str 1 1))) 58)
   (setq a (strcat a b))
   )
   (setq str (substr str 2))
)
a
)

 

(defun numbers2 (str / a b)
(repeat (strlen str)
   (if        (< 47 (ascii (setq b (substr str 1 1))) 58)
   (setq a (cons b a))
   )
   (setq str (substr str 2))
)
(apply 'strcat (reverse a))
)

Tharwat 发表于 2022-7-6 00:27:20

 
另一个
 

(mapcar 'vl-list->string
       (list (vl-remove-if
               '(lambda (u)
                  (not (member u '(48 49 50 51 52 53 54 55 56 57))
                  )
                )
               (vl-string->list "Abcd12345X7789wZ")
             )
       )
)
页: [1] 2
查看完整版本: 仅删除字母字符