首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查球拍中的用户输入

检查球拍中的用户输入
EN

Stack Overflow用户
提问于 2017-10-19 00:17:30
回答 1查看 294关注 0票数 0

我从一个用户那里得到了一个tex-field% in racket的输入,它看起来像这样:

代码语言:javascript
复制
open button a = fwd; button b = xxx; button s = xxx; close

我已经验证了它在开头和结尾分别包含open和close。但是现在我需要存储基于分号的每个子字符串,以检查它们在末尾是否有分号等。例如,在上面的示例中,它应该在向量/列表中存储3个子字符串(以更容易的为准)。它将存储为:

代码语言:javascript
复制
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,但我现在想保留分号。

EN

回答 1

Stack Overflow用户

发布于 2017-10-19 08:37:04

您可以使用带有regular expression分隔符的string-split,如下所示:

代码语言:javascript
复制
(string-split input #rx"(open | close)|(?<=;).")

它将输出列表:

代码语言:javascript
复制
'("button a = fwd;" "button b = xxx;" "button s = xxx;")

要分解正则表达式:

  • (exp)匹配任何子表达式"exp“。因此,(open )与input中的子表达式"open "匹配。与left类似,匹配" close".
  • (?<=exp)执行积极的回看,如果匹配preceding.
  • .匹配任何内容,则进行匹配,例如空格、字符etc.
  • |匹配它前面的表达式,或者在它之后先尝试( close)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46814758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档