我希望从工作流程的原始信用卡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(.*)
放在上述正则表达式之前,但由于某种原因这不起作用。
如果有人能够帮助我之后的事情,我将不胜感激!
答案 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个,那将会更有帮助,所以我们可以很好地了解这种模式。否则,这是我能用你所做的最好的。