我有以下列:
9 100 100 0
10
20
30
110 0
10
20
30
120 0
10
20
30
120 100 0
10
20
30
我想颠倒列的顺序,如:
\3\2\1\0
这就是我尝试获取一列的方法:
(\t?|\d+)
对我来说这是有意义的,但它不起作用,有没有人看到错误?
之后它假设它正在重复:
(\t?|\d+)(\t?|\d+)(\t?|\d+)(\t?|\d+)
接下来:
\3\2\1\0
有人可以帮我修理吗?
答案 0 :(得分:4)
尝试
^(\d*)\t(\d*\t)(\d*\t)(\d*)$
并将其替换为:
\4\t\3\2\1
(未经测试,但感觉正确)
如果有其他空格而不是制表符,则可能需要相应地修改正则表达式。
答案 1 :(得分:0)
包含列的示例文本不包含任何选项卡。所以这里有一个解决方案,允许使用空格和制表符来分隔列:
^(\d*)([ \t]+)(\d*)([ \t]+)(\d*)([ \t]+)(\d+)$
下一个正则表达式与上面的正则表达式相同,但效率更高一些。它也不太容易阅读。
^[ \t]*(?:(\d+)([ \t]+))?(?:(\d+)([ \t]+))?(?:(\d+)([ \t]+))?(\d+)$
它有7个捕获组。组1,3,5,7是列值,组2,4,6是列分隔符。
你的替换表达式应该是这样的,它实质上颠倒了一切:
\7\6\5\4\3\2\1
如果您想修复分隔符并改为使用制表符,您可以使用类似的东西作为替换表达式:
\7\t\5\t\3\t\1