我的數據看起來像這樣,其中負數是數字末尾的後綴 。R中的正則表達式幫助
"general_amount"
"0000000441244"
"0000000127769-"
"0000000043819"
"0000000522600-"
有人能幫我找到一個正則表達式來產生下面所需的輸出。
"general_amount"
441244
-127769
43819
-522600
我的數據看起來像這樣,其中負數是數字末尾的後綴 。R中的正則表達式幫助
"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
字符。
[^-]*
匹配所有非-
個字符。
-?
匹配零或一個-
字符。
最後,$
匹配字符串的末尾。
中間兩片與()
捕獲,如\\1
和\\2
,並以相反的順序打印。
我很好奇..你能解釋一下這裏發生了什麼嗎? :) –
這很簡單,但我會將其添加到答案。 –
感謝馬修,如果你可以添加這裏發生的事情,那將會很棒。 –
多德我花了3個小時找到問題答案
sed -re 's/[^a-zA-Z0-9]0+([0-9]+)(-?)/\2\1/g' anyfile.txt
但最終我做到了。可能有一些短暫的未來,但我明白了
這對'sed'解決方案來說沒問題,但是需要'R'中的解決方案。它很重要;在'R'中,'''字符串以字符串值的形式顯示在控制檯上,而不是值本身的一部分,因此你不需要在末尾輸入'(「)'(爲什麼捕獲?)。開頭的'[^ a-zA-Z0-9]'可以簡單地稱爲'^'。 –
感謝哥們,我也在學習。那謝謝啦。其實我是這樣做的,因爲我想允許雙引號'''0 – user2134226
我確定你發現這個問題是因爲'regex'標籤,但現在可能是安裝'R'並且玩的時候了。如果你喜歡數據,它就是一個很好的操場。 –
使用gsub,與另一種想法。
的想法是將輸入劃分成3個元素
一系列0找到' - ' 1或零時間:( - ) 「
as.numeric(gsub("(^0+)([0-9]+)(-?)","\\3\\2",tt))
[1] 441244 -127769 43819 -522600
這指定必須有一個前導0。 –
完全喪失,並已足以與它搏鬥 –
的是」 根eral_amount「文本部分的數據還是隻是你的標題?爲什麼使用正則表達式?如果您的數據是正數或帶有 - 後綴的數字,則還有其他檢測負值的方法。 – Spacedman