2016-08-30 15 views
0

我正在寻找从工作流的原始信用卡源中提取一些文本。我几乎已经得到了我想要的地方,但正在努力解决我试图提取的最后一条信息。使用来自银行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(.*)之前的上述正则表达式,但由于某种原因不起作用。

如果有人能帮助我后来的事情,我会很感激!

+1

这是什么可怕的格式?在“WELLJune350.07”部分,您怎么知道日期的结束位置以及金额的起始位置?好的,没有六月三十五号,但如果它是'June250.07'呢? 6月2日是50美元,还是6月25日0.07美元? –

+0

这是非常艰难的,绝对会扩大可以做的事情的范围。你确定他们不能用一些分隔符向你发送数据吗? “ICGROUP,INC.MELBOURNE”之后的位置值是否始终是月份的全名,后跟数字日期? – mwp

+0

嘿!我实际上曾多次“LEO'SFINEFOOD&WINEHARTWELL”:) – Bohemian

回答

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令牌可能以数字开头。那么你一定需要更复杂的货币模式!

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.07includesconversioncommissionofAUD1.469.96WOOLWORTHS3335CHADSTOCHADSTONE

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

说明:

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

但是,如果您可以提供至少3个示例,最好是5个,那么我们可以很好地体会这种模式,这会更有帮助。否则,这是我所能做的最好的事情。

+1

@ a-lau当你用'[]'在正则表达式中定义一个字符类时,它通过定义匹配该类中的任何字符。因此,您的角色类中的管道操作员不是必需的;事实上,这是错误的,因为它将匹配输入字符串中的管道字符!你也不需要转义角色类中的句点字符; PCRE从上下文中理解,你的意思是一个文字时期。 – mwp

+0

@mwp我的错误,本来就是一个圆括号。会改变。 –

+0

谢谢你。管理得到它的工作感谢所有的答复! –