【发布时间】:2015-07-25 21:05:36
【问题描述】:
正则表达式要求
我有一个包含幻方的大文件,以空格分隔的四个一组:
2 16 1 15 10 5 12 7 9 3 14 8 13 6 11 4
14 9 8 3 3 9 8 14 5 10 7 12 12 10 7 5
11 4 13 6 6 4 13 11 16 15 2 1 1 15 2 16
7 5 12 10 15 16 1 2 4 6 11 13 8 3 14 9
最终我想找到并重新格式化这些组,这样每个单独的幻方就会像这样单独显示:
2 16 1 15
14 9 8 3
11 4 13 6
7 5 12 10
10 5 12 7
3 9 8 14
6 4 13 11
15 16 1 2
9 3 14 8
5 10 7 12
16 15 2 1
4 6 11 13
13 6 11 4
12 10 7 5
1 15 2 16
8 3 14 9
查找每组四位数
首先,我有一个正则表达式,它可以找到所有四个数字的组,但这只会给我需要的 16 个匹配项如果我指定每个整数前面有 0-2 个空格:
(( {0,2}\d{1,2}){4}).*?
解决的问题
我只想捕获每列开头的整数前面的零个或一个空格,但不是分隔每个 16 块的四个空格。
更大的问题
然后我需要捕获 16 个四个整数组中的每一个,并将它们重新格式化为捕获的组
\1\5\9\13\n\n
给予:
2 16 1 15
14 9 8 3
11 4 13 6
7 5 12 10
但到目前为止,我的正则表达式捕获了所有内容。如何分离捕获组以实现此目的?
【问题讨论】:
-
说实话,我认为正则表达式不是解决这个问题的正确方法。正则表达式用于匹配和搜索,不转换输入,这显然是一个例子。即使是一个简单的 shell 脚本也可以比正则表达式做得更好/更快。
-
我确实想到了 awk 或 sed。自从我使用 awk 以来已经有几年了,但它在我上次使用它时在一个巨大的(数千个文件)网站中转换了一个字符串。所以你可能是对的。
标签: regex