使用来自银行Feed的正则表达式提取数据

时间:2016-08-30 22:05:26

标签: regex

我希望从工作流程的原始信用卡Feed中提取一些文字。我几乎已经到了想要的地方,但我正在努力寻找我想要提取的最后一条信息。

原始饲料的一个例子是:

LEO'SFINEFOOD&WINEHARTWELLJune350.0735.00ICGROUP,INC.MELBOURNEJune5UNITEDSTATESDOLLARAUD50.07includesconversioncommissionofAUD1.469.96WOOLWORTHS3335CHADSTOCHADSTONE

我希望从上面提取这个:

(ICGROUP,INC.MELBOURNE)June5UNITEDSTATESDOLLARAUD(50.07)includesconversioncommissionof

括号代表我追随的两个群体。我尝试提取的所有实例中的一致部分是:

DIGITS (TEXT) DATE TEXT AMOUNT includesconversioncommissionof

我已经能够使用正则表达式了:

([A-Z][a-z]\d)[A-Z]AUD(\d\,?\d+?.\d*)includesconversioncommissionofAUD

告诉我日期和金额。我正在努力找到一种方法来获得上面的例子ICGROUP,INC.MELBOURNE 我已尝试将\d\d(.*)放在上述正则表达式之前,但由于某种原因这不起作用。

如果有人能够帮助我之后的事情,我将不胜感激!

2 个答案:

答案 0 :(得分:1)

我认为最接近的(PCRE)就像:

/
  [\d,.]+                        # a currency value to bookend 
  (.+?)                          # capture everything in-between
  [A-Z][a-z]+\d+                 # a month followed by a day, e.g. "June5"
  .+?                            # everything in-between
  ([\d,.]+)                      # capture a currency value
  includesconversioncommissionof # our magic token to bookend
/x

这里的技巧是以非常慎重的方式对非贪婪表达式贪婪表达。如果您对此有任何疑问,请与我们联系。如果没有严格的测试,我会非常犹豫将它投入生产 - 或者甚至相信它的输出作为临时通行证!

我使用模式[\d,.]作为货币,但你可以用更复杂的东西替换它,特别是如果你期望奇怪的格式和货币符号。这里最大的潜在缺陷是ICGROUP,INC.MELBOURNE令牌可能以数字开头。那么你肯定需要更复杂的货币模式!

答案 1 :(得分:0)

这就是我所拥有的(在php中)。

$string = "LEO'SFINEFOOD&WINEHARTWELLJune350.0735.00ICGROUP,INC.MELBOURNEJune5UNITEDSTATESDOLLARAUD50.07includesconversioncommissionofAUD1.469.96WOOLWORTHS3335CHADSTOCHADSTONE";

$cleaned = preg_replace("/^(LEO'SFINEFOOD&WINEHARTWELL)([A-Za-z]{3,9})(\.|\d)*/", "", $string);
echo $cleaned;

它返回的是:ICGROUP,INC.MELBOURNEJune5UNITEDSTATESDOLLARAUD50.07包括对AUD1.469.96WOOLWORTHS3335CHADSTOCHADSTONE的转换委托

然后您可以使用并运行自己的小正则表达式。

说明:

\w{3,9}用于删除可能长度为3-9个字符的月份。然后(\.|\d)*将删除数字和点。我想我们可以使用你的正则表达式来解析月份/日期更好地提取6月5日部分,但是根据你给出的例子,它不应该是必要的。

然而,如果你能提供至少3个例子,最好是5个,那将会更有帮助,所以我们可以很好地了解这种模式。否则,这是我能用你所做的最好的。