3

我有这样的列:

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

有人可以帮我修复它吗?

4

2 回答 2

4

尝试

^(\d*)\t(\d*\t)(\d*\t)(\d*)$

并将其替换为:

\4\t\3\2\1

(未经测试,但感觉不错)

如果除了制表符之外还有其他空格,您可能需要相应地修改正则表达式。

于 2013-05-23T10:52:14.067 回答
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
于 2013-05-23T14:50:31.717 回答