2016-01-24 22 views
1

我有一个字符串,它看起来像这样如何解析这个字符串在方案中?

"21 4\n21 2 _ _ 19 11\n 12 _ _ 1 _ _\n_ _ _ 7 13 _" 

(有21和4,21和2,2和_之间的空格等)

我想遍历它,提取每个数字,字符_或\ n。

使用字符串不会起作用,因为某些元素有一个以上的字符(如21或13)

如果最简单的方法(基本上拆分的空白,并在\ n中的字符串)

将字符串转换成列表像

["21" "4" "\n" "21" "2" "_" "_" "19" "11" "\n"...] 

这将是很好,但不知道该怎么做。

+0

是'“'包含字符串 –

+0

号只是整数,空格和\ n – JennyToy

+1

我不知道'scheme'和'racket'如此? –

回答

2

井正则表达式来分割你的字符串将是

正则表达式/[\d]+|_|\\n/g

说明

[\d]+搜索数字。

_搜索下划线。

\\n搜索\n。需要逃脱双倍的\

|条件。三者中的任何一个。

g允许全局搜索。

Regex101 Demo

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" "_")) 
+0

谢谢你这个是一个很好的做法。 – JennyToy