使用Regex查找文件中的值

时间:2011-02-17 21:43:18

标签: regex parsing file-io

我不是真的在寻找语法帮助,但是接近建议。这就是我需要做的事情:

我需要从包含移动的文件(这是国际象棋游戏项目的一部分)中读取一些文本,然后打印出执行的移动。这是我用于文本文件的示例文本:

编辑:澄清一下,这些都代表了一个举动。即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解析输入以确定每次移动是什么。

同样,并没有真正寻找语法帮助,而是关于如何解决问题的建议(Pseudo)

我是用Java做的。

3 个答案:

答案 0 :(得分:1)

首先,您只想将字符串拆分为单独的移动。通过使用您的语言的字符串split函数来执行此操作。

执行此操作后,您可以解析各个动作。请注意,国际象棋移动在标准符号中可能相当复杂,因此我建议不要将其全部混合到一个正则表达式中。而是创建辅助函数,例如is_captureis_castleis_en_passantget_moving_piece等。

答案 1 :(得分:0)

这取决于语言。 如果它是一个编译语言,我会按时建议,split()并一次解析一个字母。

如果它的命令登陆,那么你可以使用awk来获取每个单独的空格,空格分隔,然后再一次解析一个字母。

答案 2 :(得分:0)

由于您正在编写国际象棋游戏项目,我建议您以更轻松的方式格式化移动文件进行解析。将所有棋子放在一行上。在下一行,用逗号分隔每个动作的动作,如下所示:B1 C3 *,B2 B3,D8 H4等。

当您在文件中阅读时,请读取第一行并将其拆分为空格。将每个结果数组元素发送到一个解析片段放置的函数。

读入下一行并将其拆分为逗号。将每个结果数组元素发送到解析移动的函数。每个元素都将包含该片段的起始和结束位置,因此您不必进行那么多疯狂的解析。