检查球拍中的字符串是否为空或只有空白字符

Check if a string is empty or only whitespace characters in racket

如何检查字符串是否为空或 racket 中是否全是空白字符? the example on their site (string$?) 无效

regexp-match-exact? 与此正则表达式一起使用:#px"\s*",它匹配空白字符零次或多次:

> (regexp-match-exact? #px"\s*" "a")
#f
> (regexp-match-exact? #px"\s*" "")
#t
> (regexp-match-exact? #px"\s*" "    ")
#t
> (regexp-match-exact? #px"\s*" "
")
#t

non-empty-string? 对于空字符串和带有空白字符的字符串有不同的结果:

> (non-empty-string? "  ")
#t
> (non-empty-string? "")
#f

与其使用一些繁琐的正则表达式(有一句关于正则表达式的名言……),不如考虑只表达您想要的内容:一个所有字符都是空格的字符串:

(define (string-whitespace? s)
  (for/and ([c (in-string s)])
    (char-whitespace? c)))

请注意,空字符串可以轻松满足这一要求。但是空串也是一个none的字符串,其字符是白色的,所以大概是:

(define (string-not-whitespace? s)
  (or (string=? s "")
      (not (string-whitespace? s))))

我先 trim 字符串:

> (non-empty-string? "         ")
#t
> (non-empty-string?  (string-trim "         "))
#f
> (non-empty-string?  (string-trim "
"))
#f

string-trim 不在 racket/base 中,不像 regexp-match-exact? , 但我看到的正则表达式越少,我感觉越好,所以我宁愿让它担心删除空格的正确正则表达式是什么。