我正在从用户那里获得一个输入中的tex-field%的输入,看起来像这样:
open button a = fwd; button b = xxx; button s = xxx; close
我已经确认它分别在开头和结尾都包含open和close。但是现在我需要存储基于分号的每个子串,以便在最后检查它们的分号等等。例如,在上面的示例中,它应该在向量/列表中存储3个子字符串(以较容易者为准)。它将存储为:
button a = fwd;
button b = xxx;
button s = xxx;
;input is the name of the string the user enters
(define vec (apply vector (string-split input)))
(define vecaslist(vector->list vec))
(define removedopen (cdr vecaslist))
(define withoutopenandclose (reverse(cdr(reverse removedopen))))
(define stringwithoutopen (string-replace input "open " ""))
(define stringtoderivate (string-replace stringwithoutopen " close" ""))
(define tempvec (apply vector (string-split stringtoderivate ";" #:trim? #f #:repeat? #t)))
尝试用分号拆分并放在向量中,但它会删除分号。当我打印矢量的长度时,它正确显示3,但我想保留分号。
答案 0 :(得分:0)
您可以将string-split
与regular expression分隔符一起使用,如下所示:
(string-split input #rx"(open | close)|(?<=;).")
将输出列表:
'("button a = fwd;" "button b = xxx;" "button s = xxx;")
分解正则表达式:
(
exp )
匹配任何子表达式&#34; exp&#34;。因此,(open )
匹配输入中的子表达式"open "
。与( close)
类似,匹配" close"
。
(?<=
exp )
会做一个积极的后顾,如果"exp"
匹配前一个匹配。
.
匹配任何内容,例如空格,字符等。
|
匹配前面的表达式,或之后,首先尝试左边的表达式。