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

删除括号外的文本

我想删除对象文本中位于一组括号或方括号之外的所有内容。我想知道最好的方法是什么。我考虑过使用vl字符串位置来查找括号/方括号的位置,然后以某种方式使用vl字符串左/右修剪。对于更有经验的人会如何应对这一问题,有什么建议吗?

Lee Mac 发表于 2022-7-6 00:06:26

由于LISP是为列表构建的,因此我会处理ASCII代码列表,例如:
(defun trimtobrackets ( s )
   (if (wcmatch s "*(*)*")
       (vl-list->string (reverse (member 41 (reverse (member 40 (vl-string->list s))))))
   )
)
_$ (trimtobrackets "outside (inside) outside")
"(inside)"

ksperopoulos 发表于 2022-7-6 00:08:30

我还没有在任何代码中使用wcmatch。谢谢你的建议。我今天将对此进行调查。
 
我注意到在这个论坛上有几次使用反向。反转列表有什么好处?

Lee Mac 发表于 2022-7-6 00:11:31

 
使用成员时,为了获得列表的正确部分,需要反转列表

ksperopoulos 发表于 2022-7-6 00:18:40

明白了!非常感谢。我不知道你必须从一开始就开始工作。我认为你可以从头开始向后或从头开始向前。

Tharwat 发表于 2022-7-6 00:24:07

另一个
 

(setq st "Abc (IN) 123 ")

(if (and (setq a (vl-string-search "(" st)) (setq b (vl-string-search ")" st))
      )
(substr st (1+ a) (- (+ 2 b) (1+ a)))
)

Lee Mac 发表于 2022-7-6 00:28:08

请注意:
相当于:
然而,我倾向于在vl字符串搜索上使用vl字符串位置:
为了解释这些情况:
_$ (trimtobrackets "abc(123(def)456)ghi")
"(123(def)456)"

ksperopoulos 发表于 2022-7-6 00:32:17

李-为什么我需要使用wcmatch函数?如果我知道我在文本中寻找什么,它应该能够在没有这个权利的情况下提取信息?

Tharwat 发表于 2022-7-6 00:35:50

 
对的

Lee Mac 发表于 2022-7-6 00:39:05

 
为了确保提供的字符串包含要修剪到的括号字符,否则您将收到意外的结果或错误,具体取决于用于修剪字符的方法。
页: [1] 2
查看完整版本: 删除括号外的文本