2016-01-24 26 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