3

如何使用 perl 正则表达式转换以下文本:

1100101
1100111
1110001
1110101

进入

1 1 0 0 1 0 1
1 1 0 0 1 1 1
1 1 1 0 0 0 1
1 1 1 0 1 0 1

我尝试使用

perl -pe 's// /g' < text.txt

但它给了我一些类似这样的有趣结果:

 1 1 0 0 1 0 1
  1 1 0 0 1 1 1
  1 1 1 0 0 0 1
  1 1 1 0 1 0 1
4

6 回答 6

7
perl -pe 's/(?<=[^\n])([^\n])/ \1/g'
于 2013-02-28T04:37:04.507 回答
5

为什么要使用正则表达式?

perl -pe '$_ = join " ", split ""'
于 2013-02-28T06:29:23.550 回答
2

使用前瞻:

perl -pe 's/(\d)(?=.)/$1 /g'

使用前瞻和后瞻:

perl -pe 's/(?<=\d)(?=.)/ /g'
于 2013-02-28T05:00:51.630 回答
1

使用自动拆分的另一种方法:

 perl -F// -ane 'print "@F";' file
于 2013-02-28T05:13:39.260 回答
0

或者像这样...

$ perl -pe 's/(?<!^)(\d)/ \1/g' input
1 1 0 0 1 0 1
1 1 0 0 1 1 1
1 1 1 0 0 0 1
1 1 1 0 1 0 1

...这里对负正则表达式有一个很好的解释: perl string pattern match的负正则表达式

于 2013-02-28T04:53:42.437 回答
0

你快到了:

perl -pe 's/(.)/$1 /g' your_file

测试如下:

> cat temp
1100101
1100111
1110001
1110101
> perl -pe 's/(.)/$1 /g' temp
1 1 0 0 1 0 1 
1 1 0 0 1 1 1 
1 1 1 0 0 0 1 
1 1 1 0 1 0 1 
于 2013-02-28T06:20:49.427 回答