我从一个用户那里得到了一个tex-field% in racket的输入,它看起来像这样:
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,但我现在想保留分号。
发布于 2017-10-19 08:37:04
您可以使用带有regular expression分隔符的string-split,如下所示:
(string-split input #rx"(open | close)|(?<=;).")它将输出列表:
'("button a = fwd;" "button b = xxx;" "button s = xxx;")要分解正则表达式:
(exp)匹配任何子表达式"exp“。因此,(open )与input中的子表达式"open "匹配。与left类似,匹配" close".(?<=exp)执行积极的回看,如果匹配preceding..匹配任何内容,则进行匹配,例如空格、字符etc.|匹配它前面的表达式,或者在它之后先尝试( close)。https://stackoverflow.com/questions/46814758
复制相似问题