2017-05-14 47 views
0

考慮R中的一個字符向量。如您猜測,這是一個信用卡語句提取(保存在一個變量x)在R中使用str_match_all處理信用卡語句:如何跳過所有字母字符但在末尾捕獲數字

[1] "Statement includes payments and charges received by April 20, 2017 May 11, 2017" 
[2] "Statement Period From March 21 to April 20, 2017"        
[3] "At April 20, 2017 250,000.00 175,836.16"           
[4] "April 07 PAYMENT RECEIVED."              
[5] "April 07 PAYMENT RECEIVED.THANK YOU 20,000.00"         
[6] "March 20 GOOGLE *TRUECALLER G.CO/PAYHELP# 29.00"         
[7] "April 20 SERVICE TAX (INCL SBC & KKC) 488.51"         
[8] "April 20 FINANCE CHARGES 3,256.70" 

我們需要使用str_match將這個字符數組轉換爲3變量矩陣,使得第一列是Date April 07March 20

第二列應該包含從「date」的末尾開始到結尾的數字開頭的整個文本。所有最後沒有編號的行都可以忽略。

第三列必須包含帶逗號和小數點的數字。

我搜索了很多,但解決方案只是跳過所有的初始數字,只匹配最後1或2位數字。

我已經試過

str_match_all(x,"(April [0-9]{2})(.+)([\\d,\\.]+)$") 

這第一欄的比賽,但第二列還包含在最後的第三列(數)的前幾個數字,第三列只包含最後一個數字:-(

我想提出一個基本的錯誤,如果這是解決我的信用卡帳單可以很容易地存儲在一個矩陣。

任何幫助將不勝感激。

+0

什麼是入門#3預期的輸出? –

+0

@StevenBeaupré:對於條目#3,期望的輸出是數字。 Andrew下面的解決方案工作。 –

回答

0

我想你想要str_match,沒有_all(因爲每行只有一行)。試試這個...

str_match(x,"([A-Z][a-z]+\\s[0-9]{2})([^0-9]+)([0-9,\\.]+$)") 

或此,如果有與數字行作爲文本的中間部分的一部分......

str_match(str_trim(x),"([A-Z][a-z]+\\s[0-9]{2})(.+\\s)([0-9,‌​\\.]+$)") 
+0

謝謝@andrew。這工作。 PS:我簡化了這個問題。實際上,有一個包含信用卡賬單的頁面的列表。因此選擇_str-match-all_ –

+0

我相信你有一點@andrew。我不需要str-match-all。沒有「_all」的功能運行良好。謝謝 –

+0

我們在您提出的解決方案中遇到了一個錯誤。它不解析在中央(第2列)有數字的行,例如 '「3月20日LINKEDIN-219 * 4710221 LINKEDIN.COM 6,000.00」' 此行未被提議的正則表達式選中。你能提出一個改變嗎?謝謝 –

相關問題