具有下面提到的数据帧,其中正则表达式对前2个字符串工作正常但不适用于第三个字符串(其中字符串的格式与上面两个不同)。我想要一个代码来检查字符串的第一种格式,然后运行正则表达式从字符串中获得最佳结果,以便在输出数据中给出下面提到的六个字段。
Sr.No Type Acc Fig Data Desc Balance
1 credit 1987 22,500.00 30-Oct-17 CAM*CASH DEPOSIT*ELISH SEC 22,951.57
2 debit 1987 5,000.00 14 May MMT*125485645*99999999 20,531.38
3 credit 1234 31/10/2017
输出:
{{1}}
答案 0 :(得分:1)
您可以使用两个正则表达式使事情更简单,更易读:在运行input <- "INR 187,314.00 credited to your A/c No XXXXXXX1234 on 31/10/17 through NEFT with UTR )"
rule_13 = str_match(input, "(credit|debit)ed[^0-9]*((?:EUR|USD|INR|Rs) [0-9,.]+)")
##> rule_13
## [,1] [,2] [,3]
##[1,] NA NA NA
rule_13_1 = str_match(input, "(?:EUR|USD|INR|Rs)\\s*(\\d[0-9,.]*)\\b")
##> rule_13_1
## [,1] [,2]
##[1,] "INR 187,314.00" "187,314.00"
fig1 <- ifelse(!is.na(rule_13[,2]),rule_13[,2],rule_13_1[,2])
fig1
## => [1] "187,314.00"
正则表达式,然后运行其他正则表达式以匹配其他格式之后,检查正则表达式1的组1或2是否匹配,以及如果没有,请使用您使用第二个正则表达式获得的值。
Fig=rule_13[,3],
因此,您只需将Fig=fig1,
替换为(?:EUR|USD|INR|Rs)
。
第二种模式匹配
EUR
- USD
,INR
,Rs
或\\s*
子串(\\d[0-9,.]*)
- 0+ whitespaces [,2]
- 第1组(将在[,1]
中,,
是完整匹配):数字后跟0+位数,.
或{{1 }} \\b
- 一个单词边界。