在 R 中使用 str_match_all 处理信用卡对帐单:如何跳过所有字母字符但在末尾捕获数字

Processing Credit card statement using str_match_all in R: how can I skip all alpha characters but capture the number at the end

考虑 R 中的一个字符向量。如您所料,这是信用卡对帐单摘录(保存在变量 x 中)

[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 变量矩阵,以便第一列是日期,例如April 07March 20

第二列应包含从 "date" 末尾到末尾数字开头的整个文本。所有末尾没有数字的行都可以忽略。

第三列必须包含带逗号和小数点的数字。

我搜索了很多,但解决方案只是跳过所有初始数字,只匹配最后一位或两位数字。

我试过了

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

这与第一列匹配,但第二列末尾还包含第三列(数字)的前几位数字,第三列仅包含最后一位数字:-(

我犯了一个根本性的错误,如果这个问题得到解决,我的信用卡对帐单可以很容易地存储在矩阵中。

任何帮助将不胜感激。

我想你想要 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,‌​\.]+$)")