我有看起来像这样的数据,其中负号是数字末尾的后缀。
"general_amount"
"0000000441244"
"0000000127769-"
"0000000043819"
"0000000522600-"
有人可以帮我找到一个正则表达式来产生下面的所需输出。
"general_amount"
441244
-127769
43819
-522600
sub('^0*([^-]*)(-?)$', '\\2\\1', x)
## [1] "general_amount" "441244" "-127769" "43819" "-522600"
^0*
匹配所有前导0
字符。
[^-]*
匹配所有非-
字符。
-?
匹配零个或一个-
字符。
最后,$
匹配字符串的结尾。
中间两块用()
、 as\\1
和捕获\\2
,并以相反的顺序打印。
使用gsub,还有另一个想法。
这个想法是将输入分成3个元素
找到 '-' 1 次或 0 次:(-?)"
as.numeric(gsub("(^0+)([0-9]+)(-?)","\\3\\2",tt))
[1] 441244 -127769 43819 -522600
老兄,我花了3个小时才找到你问题的答案
sed -re 's/[^a-zA-Z0-9]0+([0-9]+)(-?)/\2\1/g' anyfile.txt
但最后我做到了。可能有一些缺点,但我几乎明白了