正则表达式的困境

Regular expression woes

本文关键字:困境 正则表达式      更新时间:2023-10-16

我有以下数据,我想将其转换为正则表达式。

PALMKERNEL OIL Mal/dlrs吨cif鹿特丹

12月15日/1月16日890.00

1月16日/2月16日900.00+10.00

我下面的代码似乎不起作用。首先,我如何确定890之后,可能什么都没有,也可能有+10.00或任何数字?我试着用?:但有时它会完全忽略我试图捕捉的月份信息。。在这种情况下,我不想捕捉+10.00或890或900价格后的任何字符。

(棕榈油Mal\b)/(Indo-dlrs吨cif Rotterdam\b)\s*([^\s]+)\s*

对于包含日期和价格的部分,此正则表达式处理示例字符串中的两个变体。

Pattern pat = Pattern.compile( 
     "\w{3}\d{1,2}/\w{3}\d{1,2}" +
     "\s*(\d+\.\d\d)(\s+\+\d+\.\d\d)?" );
String s1 = "Dec15/Jan16 890.00";
String s2 = "Jan16/Feb16 900.00 +10.00";
Matcher m1 = pat.matcher( s1 ); 
if( m1.matches() )
  System.out.println("m1 " + m1.group(1) + ":" + m1.group(2) );
Matcher m2 = pat.matcher( s2 ); 
if( m2.matches() )
  System.out.println("m2 " + m2.group(1) + ":" + m2.group(2) );

输出:

m1 890.00:null
m2 900.00: +10.00

没有足够的信息-所以我不知道/+10.00/?中的第三种选择?。