2011-02-17 74 views
2

我並非真的在尋找語法幫助,而是說,但方法建議。以下是我需要做的事情:使用正則表達式來查找文件中的值

我需要從包含移動的文件(這是國際象棋遊戲項目的一部分)中讀取一些文本,然後打印出執行的操作。這裏是我用於文本文件的示例文本:

編輯:澄清,這些代表一個舉動。即RLA1意味着移動到A1白色的房間,NlB1意味着白騎士B1等

RlA1 NlB1 BlC1 QlD1 KlE1 BlF1 NlG1 RlH1 
PlA2 PlB2 PlC2 PlD2 PlE2 PlF2 PlG2 PlH2 
RdA8 NdB8 BdC8 QdD8 KdE8 BdF8 NdG8 RdH8 
PdA7 PdB7 PdC7 PdD7 PdE7 PdF7 PdG7 PdH7 
B1 C3* B2 B3 D8 H4 

,這裏是應該是什麼這個例子輸入輸出:

A white rook is placed on A1 and a white knight is placed on B1 ... etc 
A white pawn ... etc 
A black rook ... etc 
A black pawn ... etc 
The piece on B1 moves to C3 and captures the piece there and the piece on B2 moves to B3 and the piece on D8 moves to H4 

很顯然,我將使用一個toString()方法重寫以打印返回的動作,但是我需要知道如何使用RegEx解析輸入以確定每個動作是什麼。

再次,沒有真正尋找的語法幫助這麼多意見,我應該如何處理我在Java中這樣的問題(僞)

+1

你使用什麼語言? – Tim 2011-02-17 21:44:27

+0

@Tim好問題:P – Donut 2011-02-17 21:45:08

回答

1

首先,您只是想將字符串拆分爲單個動作。通過使用您的語言的字符串split函數來執行此操作。

這樣做後,你可以解析個人動作。請注意,儘管象棋移動在標準符號中可能相當複雜,所以我建議不要試圖將它們全部混合成一個正則表達式。而是創建幫助函數,如is_capture,is_castle,is_en_passant,get_moving_piece等等。

0

這取決於語言。 如果它是一種編譯語言,我會像tim一樣提出建議,一次拆分()並解析一個字母。

如果它的命令着陸了,那麼你可以使用awk來抓取每一個單獨的空格,然後再一次解析一個字母。

0

由於您正在編寫國際象棋遊戲項目,我建議您以更簡單的方式對您的移動文件進行格式分析。將所有片段放置在一行上。在下一行中,用逗號分隔每個移動的移動,如下所示:B1 C3 *,B2 B3,D8 H4等

當您在文件中讀取時,請在第一行中讀取並將其拆分空白。將每個結果數組元素髮送到解析片段放置的函數。

閱讀下一行,並用逗號分隔。將每個得到的數組元素髮送到解析移動的函數。每個元素將包含片段的開始和結束位置,因此您不必做太多瘋狂的解析。