1

我有看起来像这样的数据,其中负号是数字末尾的后缀。

"general_amount"
"0000000441244"
"0000000127769-"
"0000000043819"
"0000000522600-"

有人可以帮我找到一个正则表达式来产生下面的所需输出。

"general_amount"
 441244
-127769
 43819
-522600
4

3 回答 3

9
sub('^0*([^-]*)(-?)$', '\\2\\1', x)

## [1] "general_amount" "441244"         "-127769"        "43819"          "-522600"

^0*匹配所有前导0字符。
[^-]*匹配所有非-字符。
-?匹配零个或一个-字符。
最后,$匹配字符串的结尾。

中间两块用()、 as\\1和捕获\\2,并以相反的顺序打印。

于 2013-01-07T00:35:21.293 回答
1

使用gsub,还有另一个想法。

这个想法是将输入分成3个元素

  1. 系列 0 :(^0+)
  2. 数字系列:([0-9]+)
  3. 找到 '-' 1 次或 0 次:(-?)"

       as.numeric(gsub("(^0+)([0-9]+)(-?)","\\3\\2",tt))
       [1]  441244 -127769   43819 -522600
    
于 2013-01-07T07:39:27.930 回答
0

老兄,我花了3个小时才找到你问题的答案

sed -re 's/[^a-zA-Z0-9]0+([0-9]+)(-?)/\2\1/g' anyfile.txt 

但最后我做到了。可能有一些缺点,但我几乎明白了

于 2013-01-07T05:31:25.697 回答