簡體   English   中英

使用正則表達式在文件中查找值

[英]Using Regex to find values in a file

可以這么說,我並不是真正地在尋找語法幫助,而是尋求建議。 這是我需要做的:

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

編輯:澄清一下,這些每個都代表一個動作。 即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執行此操作。

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

完成此操作后,您可以解析單個動作。 請注意,盡管國際象棋的移動在標准符號中可能非常復雜,所以我建議不要嘗試將它們全部融合到一個正則表達式中。 而是創建輔助函數,例如is_captureis_castleis_en_passantget_moving_piece等。

這取決於語言。 如果它是一種編譯語言,我將按照tim的建議進行操作,split()並一次解析一個字母。

如果命令到達,則可以使用awk例如抓取每個用空格分隔的單獨字母,然后再次解析一個字母。

由於您正在編寫國際象棋游戲項目,因此建議您以一種更容易解析的方式來格式化您的動作文件。 將所有作品放置在一行上。 在下一行中,用逗號隔開各個動作,例如:B1 C3 *,B2 B3,D8 H4等。

當您閱讀文件時,請閱讀第一行並將其在空白處分割。 將每個結果數組元素發送到一個分析片段位置的函數。

閱讀下一行,並以逗號分隔。 將每個結果數組元素發送到一個分析動作的函數。 每個元素都將包含片段的開始和結束位置,因此您不必進行太多瘋狂的分析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM