我有一个看起来像这样的字符串
"21 4\n21 2 _ _ 19 11\n 12 _ _ 1 _ _\n_ _ _ 7 13 _"
(21和4之间有空格,21和2,2和_等)
我想循环遍历它,提取每个数字,字符_或\ n。
(基本上将空格上的字符串拆分为\ n)
使用子字符串不起作用,因为某些元素有多个字符(如21或13)
如果最简单的方法是将字符串转换为像
这样的列表["21" "4" "\n" "21" "2" "_" "_" "19" "11" "\n"...]
这样会很好,但不知道该怎么做。
答案 0 :(得分:3)
这是让你入门的东西。这不使用正则表达式 - 只需重复使用read
。
#lang racket
(define (parse-line line)
(define in (open-input-string line))
(for/list ([sym (in-port read in)])
(~a sym)))
(define (parse str)
(define in (open-input-string str))
(for/list ([line (in-lines in)])
(parse-line line)))
(parse "21 4\n21 2 _ _ 19 11\n 12 _ _ 1 _ _\n_ _ _ 7 13 _")
输出结果为:
'(("21" "4")
("21" "2" "_" "_" "19" "11")
("12" "_" "_" "1" "_" "_")
("_" "_" "_" "7" "13" "_"))
答案 1 :(得分:2)
分割你的字符串的正则表达式将是
正则表达式:/[\d]+|_|\\n/g
<强>解释强>:
[\d]+
搜索数字。
_
搜索下划线。
\\n
搜索\n
。需要\
双倍逃避。
|
是 OR 条件。三者中的任何一个。
g
允许全局搜索。