根据字符串结构在R数据帧中运行Regex

时间:2018-01-29 14:08:39

标签: r regex regex-lookarounds

具有下面提到的数据帧,其中正则表达式对前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}}

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 - USDINRRs\\s*子串
  • (\\d[0-9,.]*) - 0+ whitespaces
  • [,2] - 第1组(将在[,1]中,,是完整匹配):数字后跟0+位数,.或{{1 }}
  • \\b - 一个单词边界。