黄翔 发表于 2024-6-27 22:53:14

从后向前搜索字符串

本帖最后由 黄翔 于 2024-6-27 23:51 编辑

讨论下与vl-string-search类似.但是从后向前搜索.
表示搜索的开始位置从后向前搜索,缺省值为 0。
(vl-string-search-Reverse Pattern string start-pos)

Pattern      |                |包含要搜索的子串
String      |            |在其中搜索 pattern   
Start-pos    |               |表示搜索的开始位置从后向前搜索,缺省值为 0。


(vl-string-search-Reverse "foo" "pfooyey on foo you" 0) => 11
(vl-string-search-Reverse "foo" "pfooyey on foo you" 3) => 11
(vl-string-search-Reverse "foo" "pfooyey on foo you" 4) => 11
(vl-string-search-Reverse "foo" "pfooyey on foo you" 5) => 1
怎么写比较好.

黄翔 发表于 2024-6-27 23:44:40

(defun vl-string-search-Reverse (Pattern string start-pos / pos pos_lst start-posTrue x)
(setq pos_lst nil pos 0)
(while (setq pos (vl-string-search pattern string pos))
    (setq pos_lst (cons pos pos_lst))
    (setq pos (1+ pos))
)   
(if(null start-pos)(setq start-pos 0))
(setq start-posTrue (- (strlen string) start-pos (strlen pattern) ))
(setq pos_lst (vl-remove-if '(lambda(x) (< start-posTrue x)) pos_lst))
(car pos_lst)
)

自贡黄明儒 发表于 2024-6-28 07:42:36

本帖最后由 自贡黄明儒 于 2024-6-28 07:43 编辑

只能从左向右搜索吧,能从后向前搜索?lisp的设计都便于掌握,不会搞得那么复杂。

kozmosovia 发表于 2024-6-28 09:24:36

从前往后搜,每次搜到了就把前面的干掉,看最后还剩的字符串长度,反算一下就知道结果了。
或者以搜索字符为分隔符分隔字符串为表,计算最后一项的字符串长度,反算。
页: [1]
查看完整版本: 从后向前搜索字符串